‘壹’ 单片机程序注释
ORG 0000H //定义程序开始地址
AJMP MAIN //跳转到MAIN标志处执行
ORG 30H // 定义MAIN起始地址为0030H
MAIN: MOV SP, #60H //把立即数0x60植入SP
MOV DPTR, #4100H //送立即数4100H到DPTR
MOV A, #0fH //送立即数0fH到A寄存器
MOVX @DPTR, A //将A中的值送到以DPTR中的内容表示的外部地址中,即外部地址4100H中
MOV 70H,#01H
MOV 71H,#02H
MOV 72H,#03H
MOV 73H,#04H
MOV 74H,#05H
MOV 75H,#06H
MOV 76H,#07H
MOV 77H,#08H //以上均是把后面的立即数送到相对应的地址中
LOOP:ACALL DISPLAY //调用子函数,即DISPLAY标志处的程序段
AJMP LOOP //跳转到LOOP处执行,与上面那条构成循环调用DISPLAY
DISPLAY:
MOV R0,#70H //送立即数到R0寄存器
MOV R3,#0feH //送立即数到R3寄存器
LD0: MOV DPTR, #H //送立即数到DPTR寄存器
MOV A, #0FFH //送立即数0FFH到A寄存器
MOVX @DPTR, A //将A中的数0FFH送到以DPTR中的内容所表示的外部地址,即外部H地址处。
MOV A,@R0 // 将以R0中的内容所表示的地址中的内容送到A中,即地址(70H)中的数01H送到A中
MOV DPTR,#DISTAB //把DISTAB标志所处的地址送到DPTR中
MOVC A,@A+DPTR //查表。@A+DPTR即是取得(A+DPTR)地址中的内容。然后通过MOV指令送到A中。这条指令结合上面两条,及后面的那个INC R0 指令共同构成遍历DISTAB所表示的表。达到查表。
MOV DPTR,#4101H
MOVX @DPTR,A //与上面一句结合,达到把A中的内容送到外部地址4101H中。
MOV DPTR,#H //送立即数H到DPTR
MOV A,R3 // 把R3中的内容送到A中
MOVX @DPTR,A //把A中内容送到外部地址H中
ACALL DELAY //调用延时子函数DELAY,即跳到DELAY处执行
INC R0 //R0中的内容自增1
JNB ACC.7,LD1 //如果ACC.7这一位不为1,则跳到LD1标志处执行。
RL A //A中内容左移一位
MOV R3,A //送A中的内容到R3中
AJMP LD0 //跳到LD0标志处
LD1: RET //子函数返回指令
DISTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //定义一个表,相当于C语言中的数组。DB的意思是规定表中每个数占一个字节。
DELAY: //延时子函数
MOV R7,#02h //送立即数02H到R7中
DELAY1: MOV R6,#0FFH//送立即数0FFH到R6中
DELAY2: DJNZ R6,DELAY2 //R6中的数减1后如不为跳转到DELAY2处,本例中即继续执行这句,直到R6中内容为0.
DJNZ R7,DELAY1 //R7中的内容减一,不为零则跳转到DELAY1处
RET//延时子函数返回
END //程序结束
语言表达不好,解释的难免有点不周到,希望能够帮助LZ。
LZ加油!
‘贰’ 注释一下 单片机程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8个数码管的位选择信号表
uchar code display[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //1-8的共阴字码表
sbit wei=P3^7; //P3.7用于控制哪位显示
sbit rest=P2^7; //P2.7用于复位
void delay(uint z) //延时函数,入口参数Z.具体延时于晶振频率有关
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
main() //主函数
{
uchar i,temp;
P0=0xff; //P0口全部拉高,置1
delay(10); //延时delay(10)MS
wei=1; //P3.7置1
while(1) //循环扫描P1口按键状态
{
temp=0xfe; //temp存扫描码
for(i=0;i<8;i++) //循环8次,即扫描8个按键
{
if(P1==temp) //如果P1口读入的状态等于当前扫描码
{
delay(10); //延时去抖
if(P1==temp) //再读P1口比较
{
while(1) //确定按键有效,进入循环体
{
if(rest==0) //如果P2.7==0
{
delay(10); //延时去抖
if(rest==0) //确定P2.7脚按键按下
{
P0=0xff; //P0口拉高
P3=0; //P3口送0 ,即熄灭所有LED数码管
while(rest==0); //如果P2.7的按键一直按下,则等待
break; //如果P2.7按键弹开,则跳出循环体,重新扫描按键
}
}
else //如果P2.7==1,即复位键没有按下
{
P0=table[i]; //P0口送出P1口按键对应位的位控号
P3=display[i]; //P3口送对应的段码值,形成显示
}
}
}
}
temp=(temp<<1)|0x01; //temp左环移,扫描下一按键
}
}
}
该程序实现的功能大概是:将P1口按键的状态显示到对应位的LED管上,比如按下第2个键,会在第2个数码管上显示2同时按下多个键也一样,按下哪几个就对应显示哪几个键的值.按下复位按键后,所有数码管
熄灭.
希望我猜得对,忽忽
‘叁’ 51单片机C语言程序注释标注(写全)
#include<reg51.h>//调用头文件reg51.h
voidmain()//主函数
{
unsignedchar//无符号字符型
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//定义一个数组LED数码管译码用的码表
while(1)//主循环
{
P2=P2|0x07;//P2口与0x07按位进行或运算
while(P2&0x07==0x07);//如果P2扣低三位为111则原地等待
switch(P2&0x07)//获取P2低三位值并且据此执行响应的操作
{
0x06:P0=tab[0x0D];break;//P2低三位为06H,数码管显示“d”
0x05:P0=tab[0x0E];break;//P2低三位为05H,数码管显示“E”
0x03:P0=tab[0x0F];break;//P2低三位为03H,数码管显示“F”
}
}
}
‘肆’ 单片机程序注释
前面的错了 是这个
ORG 00H
START: ;程序开始
NOP
MOV R3,#3 ;给r3赋值
LOP2: ;网络标号
MOV R4,#8
MOV R2,#0
LOP1:
MOV P1,#0FFH;p1口置位
MOV DPTR,#TABA;把表格地址给dptr
MOV A,R2;给表格的偏移量
MOVC A,@A+DPTR;取表格
MOV P3,A;取出的数值给p3口
INC R2;表格偏移加1
LCALL DELAY;调用延时
DJNZ R4,LOP1;自减循环1
DJNZ R3,LOP2;自减循环2
MOV R3,#3;给r3重装值
LOP4:
MOV R4,#8
MOV R2,#7
LOP3:
MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,A
DEC R2;r2自减1
LCALL DELAY
DJNZ R4,LOP3
DJNZ R3,LOP4
MOV R3,#3
LOP6: MOV R4,#8
MOV R2,#0
LOP5: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
INC R2
LCALL DELAY
DJNZ R4,LOP5
DJNZ R3,LOP6
MOV R3,#3
LOP8:
MOV R4,#8
MOV R2,#7
LOP7:
MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
DEC R2
LCALL DELAY
DJNZ R4,LOP7
DJNZ R3,LOP8
LJMP START
;延时程序
DELAY: MOV R5,#10
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
;表格
TABA: DB 00H,11H,6AH,4CH,7FH,4CH,0AH,01H
TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H
END
没标的都和前面的一样
‘伍’ 单片机程序语言注释,每一行的注释都要
org 00h ;程序从00h开始执行
ljmp start ;跳到start
org 30h ;rom从30h开始
start: mov sp,#60h ;堆栈设置
mov p0,#0ffh ;拉高P0口
jnb p1.0,paoma ;P1.0所接按键是否有按下,有按下跳paoma
jnb p1.1,zyc ;P1.1所接按键是否有按下,有按下跳zyc
jnb p1.2,zbc ;P1.2所接按键是否有按下,有按下跳zbc
jnb p1.3,gdjo ;P1.3所接按键是否有按下,有按下跳gdjo
sjmp start ;循环扫描按键
paoma: mov p0,#0feh ;1键跑马子程序
restart:mov r7,#7 ;灯的个数
loop: mov a,p0 ;将P0中的#0feh ,
rl a ;不带进位左移一次
lcall delay ;延时一段时间,用于看到流水的效果
mov p0,a ;再送回P0口显示
jb p1.0,start ;按键抬起就返回START
djnz r7,loop ;八个灯是否亮完
sjmp restart ;按键没有抬起则一直在流水灯模式
ret ;退出
zyc: mov p0,#0feh ;2键左右循环
mov a,p0 ;P0送入累加器ACC
restart1:
mov r5,#7 ;灯的个数,下一句同理
mov r4,#7
loop3:
mov a,p0 ;P0的值送入A
jb p1.1,start ;按键抬起就返回start,重新扫描按键
rl a ;左移一次
lcall delay ;延时一段时间,用于看到流水的效果
mov p0,a ;再送回P0口显示
djnz r5,loop3 ;是否左流水完成,是则向下执行
loop4:
rr a ;右移一次
lcall delay ;延时一段时间,用于看到流水的效果
mov p0,a ;再送回P0口显示
djnz r4,loop4 ;是否右流水完成,是则向下执行
sjmp restart1 ;按键没抬起就一直循环
ret ;退出,
zbc: mov p0,#0c3h ;3键中间与头尾交替点亮
loop5: mov a,p0 ;取P0的值送入A
jb p1.2,start ;按键是否抬起,抬起就返回START
swap a ;a里面的内容的高四位与低四位交换
lcall delay ;延时用于看到交替点亮的过程
mov p0,a ;送回P0口显示
sjmp loop5 ;按键没有抬起则一直循环
ret
gdjo: mov p0,#0f0h ;4键高低奇偶交替
mov a,p0 ;相同语句意思同理,见上
swap a ;同理
lcall delay ;同理
mov p0,a ;同理
mov p0,#55h ;间隔点亮
loop6: mov a,p0 ;同理
jb p1.3,start ;同理
rl a ;以下同理
lcall delay
mov p0,a
sjmp loop6
ret
delay: ;延时
mov r6,#200
loop2: mov r7,#250
loop1: nop
nop
djnz r7,loop1
djnz r6,loop2
ret
end
‘陆’ 单片机程序求注释
单片机程序求注释#include <reg52.h> //调用单片机头文件
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535
#include <intrins.h>// 有了他下面这些关键字随便用
/*_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作8051 NOP 指令
0 1 2 3 4 5 6 7 8 9
uchar code smg_[]={0x28,0xe1,0x32,0xa2,0x54,0xa1,0x21,0xea,0x20,0xa0,
a b c d e f g //数组有code存在ROM没code保存在内存
0x60,0x25,0x39,0x26,0x31,0x71,0xff}; //数码管段选定义
uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};//数码管位选定义
uchar dis_smg[8] = {0};
uchar smg_i = 4; //显示数码管的个位数
sbit beep = P2^3; //蜂鸣器IO口定义
bit flag_lj_en; //按键连加使能
bit flag_lj_3_en; //按键连3次连加后使能 加的数就越大了
uchar key_time,key_value; //用做连加的中间变量
bit key_500ms ;
bit flag_300ms ;
uchar menu_1; //菜单设计的变量
uint t_high = 20; //上限报警值
sbit hx711_dout=P2^7;
sbit hx711_sck=P2^6; //hx711模块端口选择
long weight;
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
uchar flag_200ms ;
#define GapValue 437.0
uint temp,qi_weight;
bit chaozhong_flag;
bit leiji_flag;
/***********************1ms延时函数*****************************/
void delay_1ms(uint q)//无符号整形参数q
{
uint i,j; //定义无符号整形变量i和j
for(i=0;i<q;i++) //变量i从0加到q
for(j=0;j<120;j++); //变量j从0加到120
}
/***********************数码显示函数*****************************/
void display()
{
static uchar i; //申请无符号字符变量i
i++;
if(i >= smg_i)//如果大于等于smg i向下执行
i = 0; 变量i清0
P1 = 0xff; //消隐 单片机p1口发送11111111
P3 = smg_we[i]; //位选 数组i送入单片机P3口
P1 = dis_smg[i]; //段选 数组i的内容送到p1口
}
/*************定时器0初始化程序***************/
void t
‘柒’ 单片机几段程序 注释
1: dly1 equ 41h //让dly1是41h的别名,相当于c语言中得#typedef dly1 41h
2: dly2 equ 42h //同上
3: dly3 equ 43h //
4: org 0000h //把程序的起始地址放在0000h的地址上 ,你也可以把它放在别的位置上
5: mov p2,#0ffh //给P2口赋予ffh
6: mov dptr,#sm //把标号sm所在的地址,即17行的地址赋给指针dptr
//从7行道16行是个2成嵌套循环。这是个死循环,一般都是这样的。
7: loop:mov r0,#11 //loop是这行代码所在行的别名。给ro寄存器赋值11
8 clr a //把a寄存器清零,即a=0
9: lop: push acc //lop是这行的别名。把a压入堆栈,就是要保护a的值,acc其实就是a
10: lcall delay //调用delay这个别名所在的行,即18行
11: movc a,@a+dptr //注意是movc.把dptr加a这个地址上得数赋给a,
12: mov p2,a //把a的值赋给p2口
13: pop acc //从堆栈弹出a,也就是恢复a的值
14: inc a //a=a+1,自增1
15: djnz r0,lop //这是个判断转移句子。如果ro不等于0,则跳转到lop(即9行),同时ro=ro-1
16: sjmp loop //无条件跳转,直接跳转到loop(即7行)
17: sm: db 9Fh,25h,0Dh,99h,49h,41h,1Fh,01h,19h,71h,03h;
//从18行道24行,是个延时函数,通过三成循环实现
18: delay:mov dly1,#30 //把30放到41h的地址上。(dly1 equ 41h )
19: dlop2:mov dly2,#100 //同理
20: dlop3:mov dly3,#100 //
21: djnz dly3,$ //如果41h不等于0,则什么都不执行,然后41h=41h-1
22: djnz dly2,dlop3 //如果42h不等于0,则跳转到dlop3这行,也即是20行
23: djnz dly1,dlop2 //同上。
24: ret //返回调用delay这个函数的的下一行,也即是11行
26:end //结束
// 现在一般都不用汇编写单片机的代码了,一般都是用c语言,用keii开发平台,这个也就是考试用的吧
//所学未深,若有出错之处,敬请赐教
[email protected]
‘捌’ 急求这个单片机程序的注释
• #define uint unsigned int //定义无符号整型变量
• #define uchar unsigned char //定义无符号字符型变量
• bit flag=0,ftser=1,frser=1; //定义位
• void delay(uint z) //延时子程序(Z来控制延时时间)具体时间要看外面的晶振
• {
• uint x,y; //定义变量
• for(x=0;x<z;x++) //for循环
• for(y=0;y<248;y++);
• }
• void serial() interrupt 4 using 2 //串口中断子程序 入口4
{
if(RI==1) //串口接收中断标志位 RI=1发生中断
{
RI=0; //手动清除中断标志
frser=0; //接收标志位置0
}
else
{
TI=0; //串口发送中断标志位 T1=1发生中断
ftser=0; //发送标志位置0
}
}
void main(void) //主程序
{
uchar i=0,j=0,temp=0xff;
TMOD=0X20; //串口中断初始化 设置为8位自动重装定时器
TH1=0XFd; //高8位时间常数
TL1=0XFd; //低8位时间常数
SCON=0X50; //串行口工作方式2 允许接收
PCON=0X00; //波特率不倍增
ES=1; //串行中断使能
EA=1; // 打开中断使能
TR1=1; //打开定时器
while(1)
{
while(frser==1); //判断接收是否完成
frser=1; //接收标志位置1
i=SBUF; //串口数据变量 i
P0=255-i; //将数据转反码后由P0口输出
delay(200); //调用延时
SBUF=i; //串口发送数据(和接收的一样)
ftser=1; //发送标志位置1
while(ftser==1); //等待串口发送完成
}
里面可以加一些数据判断的,这个小程序玩起来没什么意思,不是很直观!
总体看也就是利用串口助手发一个数据,然后由单片机回传一个相同的数据并在p0口输出其反码
‘玖’ 单片机中有哪两种注释,符号是什么
为单片机编程时,用汇编语言写程序时,用分号 ; 表示注释符号。
用C语言写程序时,有两种注释符号,//为本行注释符
/*
注释内容
*/
为一段多行注释符。
‘拾’ 单片机串口程序注释
ORG 0000H
LJMP START
ORG 0100H
START: MOV TMOD,#01H ;置T0为工作方式1
MOV TH0,#3CH ;置T0定时初值50ms
MOV TL0,#0B0H
CLR TF0
SETB TR0 ;启动T0
CLR A