a單片機編程
A. 單片機編程用六中方法使a中內容清零
為什麼用6中方法呢?直接給a賦值0,即a=0;或者,將一個變數b賦值給a,即a=b(當然賦值前b的值為0,b可以是程序中定義的變數、單片機的寄存器、寄存器的某一位);或者,將一個變數b取反賦值給a,即a=b(當然賦值前b的值為非0,b可以是程序中定義的變數、單片機的寄存器、寄存器的某一位);等等
a=0;
a=a&&0;
a=!1;
B. 關於單片機編寫程序 將A中的二進制數變換成3為BCD碼 並將百,十,個位數分別防禦內部RAM的50H 51H 52H中
這程序也寫的太復雜了!既然51單片機有DIV指令,並且只是把A中的數字轉變為BCD,那就用DIV直接運算:
MOV A,#0FDH
MOV B,#100
DIV AB
MOV 50H,A
MOV A,B
MOB B,#10
DIV AB
MOV 51H,A
MOV 52H,B
計算完成,這樣50H就是百位數,51H是十位數,52H是個位數
C. 單片機編程將累加器A中的二進制數變成BCD碼,並將百、十、個位數分別寫入內部RAM中的50H、51H、52H中。
mov b,#10
div ab
mov 50h,a
mov a,b
da a
mov 52h,a
anl 52h,#0fh
swap a
anl a,#0fh
mov 51h,a
end
D. 利用單片機編程:a.開機後從LED1到LED8依次點亮後全熄滅,狀態變化時間間隔為1秒;
#include <REG51.h> //51頭文件
/*********************************************************************************************/
#define DY_PORT P1 //設置LED連接的I/O組
#define DY_SPEED 100 //設置每一個明亮級的停留時間(值域:0~65535)
/*********************************************************************************************
bit [自定義名] ; //定義一個位(位的值只能是0或1)例:bit LED
#define [代替名] [原名] //用代替名代替原名(可以方便修改常改或調試的值)例:#define LED P1
sbit [自定義名] = [系統位名] ; //自定義系統位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定義名] ; //定義一個0~255的整數變數.例:unsigned char a;
unsigned int [自定義名] ; //定義一個0~65535的整數變數
/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延時程序
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);//STC單片機在外部晶振為12MHz時i值上限為600
} //AT89C51單片機在外部晶振為12MHz時i值上限為125
}
/*********************************************************************************************/
void main(void){
unsigned int i;
unsigned int temp;
while(1){
temp=0x01;
for(i=0;i<8;i++){ //8個流水燈逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++){ //8個流水燈反向逐個閃動
DY_PORT=~temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++){ //8個流水燈依次全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++){ //8個流水燈依次反向全部點亮
DY_PORT=temp;
delay(DY_SPEED); //調用延時函數
temp>>=1;
}
}
}
E. 單片機編程將累加器A中的二進制數變成BCD碼,並將百、十、個位數分別寫入內部RAM中的50H、51H、52H中。
這程序也寫的太復雜了!既然51單片機有div指令,並且只是把a中的數字轉變為bcd,那就用div直接運算:
mov
a,#0fdh
mov
b,#100
div
ab
mov
50h,a
mov
a,b
mob
b,#10
div
ab
mov
51h,a
mov
52h,b
計算完成,這樣50h就是百位數,51h是十位數,52h是個位數
F. 單片機編程中R6,R7,R0,A是什麼
樓上誤解了,沒看清題意,樓上說的那幾個是PIC單片機的,樓主說的是51單片機的
R6R7R0是51單片機中的工作寄存器組中的成員用於存放數據,這樣的工作寄存器組共有四組,由程序狀態字PSW中的RS0、RS1控制,
A是累加器,幾乎是一個萬能的數據寄存器,單片機一大部分的運算需要通過它來完成,