求该单片机程序的注释

求该单片机程序的注释,第1张

呵呵 俺帮你吧

CNT EQU 30H ;使用片内数据存储器30H 为用户定义一个软件计数器

ORG 0000H ;单片机起始地址

SJMP STA ;跳转到主程序STA

ORG 000BH ;定时计数器0的中断入口地址

LJMP T0ISR ;转定时计数器0的中断

ORG 0050H ;主程序起始地址

STA:

MOV TMOD,#01H ;设置模式寄存器 规定定时器0 定时 工作在方式1 为16位的定时计数器

MOV TH0,#3CH ;送时间常数

MOV TL0,#0B0H ; 定时时间=50ms

MOV P1,#0FEH ;送LED指示灯的亮灭初值即: 灭灭灭灭灭灭灭亮

MOV CNT,#20 ;送软件计数器的计数初值为20 即软件定时=1秒

SETB ET0 ;允许定时器0中断

SETB TR0 ; 启动定时器0定时

SETB EA ;开中断

SJMP $ ;等待定时器中断

T0ISR: ;定时器0中断服务程序

CLR TR0

MOV TH0,#3CH ;重新送时间常数

MOV TL0,#0B0H;50ms

SETB TR0

DEC CNT ;软件计数器减1

MOV A,CNT

JNZ T0ISRE ;等于0 表明定时时间=2050ms=1秒

MOV CNT,#20 ;重新送初值

MOV A,P1

RL A ; LED指示灯的亮灯左移一位

MOV P1,A

T0ISRE:

RETI ;中断返回

END ;汇编结束

呵呵 满意就选满意回阿

建议你到网上搜索个单片机C语言的教程看看,高手是没时间给你一句句注释的

我大概给你说一下0x代表16进制数,0b代表2进制数,十进制数一般什么都不加

char a=0x10;//十六进制

char a=0b00010000;//二进制数

char a=20; //十进制数

由于单片机一般处理无符号数,所以大部分的变量都这么定义:

unsigned char a=0x10;//unsigned代表无符号的意思

另外unsigned char code a=0x10;代表将变量存到程序区(,没有code关键字变量是放在数据区的,别说分不清程序区和数据区)类似的关键字还有:

data:存到片内低128字节的数据区

bdata:变量存到客位寻址区

pdata:片外256字节内

xdata:片外ram中

两外这两句:

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

初学者往往是计算出定时值,换算成16进制数再写入TH0,TL0(我当年也这么傻),

其实这个过程可以让编译器完成,就定义成上面的两句

void time0() interrupt 1:

interrupt是c51为中断新增加的关键词,提供中断入口,完整声明为

void 中断名 (void)interrupt 中断号x using n

中断号x可以为0~31,其中0:表示外部中断0,1表示定时器0中断等等,using n表示使用第几组用户寄存器,n=0~3

还是建议你看看C51的书,内容太多了

这个是单片机实现数码管动态显示时间,并有按键配合实现时间设置的程序

如果方便的话,建议给出完整的代码,更好阅读理解一些

有一点疑问,不清楚‘shan==1 ’有什么含义

代码在这里格式丢失了,你可以看看附件的c文件

void display0()

{

 if(shan==1&&mode0==1)P0=0xff; // shan=1 并且 mode0=1 则关闭显示(此时正在进行‘分’设置)

 else       // 其他情况下,显示时间的分钟( 假设时间是“12:34”)

 {

  P0=table[minute/10]; //P0输出段码, ‘分’的 高位 即‘1’

  P2=(~1)|0xf0;   //数码管第一位点亮

  delay_ms(15);   //使数码管维持第一位点亮15毫秒

P2=0xff;  //取消段选,关闭数码管显示,以免切换到下一位显示的时候产生干扰

  

  P0=table[minute%10]; //P0输出段码, 分 低位 即‘2’

  P2=(~2)|0xf0;delay_ms(15);//数码管第二位点亮

  

  P2=0xff;

 }

if(shan==1&&mode0==2)P0=0xff;// shan=1 并且 mode0=2 则关闭显示(此时正在进行‘秒’设置)

 else      //  其他情况下,显示时间的秒( 假设时间是“12:34”)

 {

  P0=table[second/10]; //P0输出段码,秒 高位 即‘3’

  P2=(~4)|0xf0;delay_ms(15);//数码管第三位点亮

P2=0xff;

  

  P0=table[second%10]; //P0输出段码, 秒 高位 即‘4’

  P2=(~8)|0xf0;delay_ms(15);//数码管第四位点亮

P2=0xff;

 }

led1=1;led2=1; // LED1 LED2 关闭(或点亮)

 

 if(!shezhi)  //如果 shezhi =0 (按下‘设置’按键)

 {

  delay_ms(200);

  mode0++; //实现 mode0自加

  if(mode0>2)mode0=0; //大于2则归0

 }

if(mode0==1) //在 mode0=1时进行 时间 分 设置

 {

  if(!jia){delay_ms(200);minute++;if(minute>59)minute=0;} //按键‘加’ 按下时 分 加1 ,如果分超过59,则归零

  else if(!jian){delay_ms(200);minute--;if(minute>59)minute=59;}//‘减’ 按下时 分 减1 ,如果分超过59,则归零(0-1=-1,但对于unsigned char型数据,-1=255,所以会有255>59的情况)

 }

 else if(mode0==2) //在 mode0=2 时进行 时间 秒 设置

 {

  if(!jia){delay_ms(200);second++;if(second>59)second=0;}//‘加’ 按下时 秒 加1 ,如果秒超过59,则归零

  else if(!jian){delay_ms(200);second--;if(second>59)second=59;}

 }

 

}

以上就是关于求该单片机程序的注释全部的内容,包括:求该单片机程序的注释、哪位高手给这个51单片机的程序写个注释、单片机程序标下注释~~~~~~~~~~高分悬赏等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9518368.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存