- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《单片机原理及应用》电子课件
2.1.2 MCS-51/52单片机存储器结构 1. MCS-51/52单片机存储器划分方法 串口中断服务程序流程图 程序清单 ;一个以89C51为核心构成的数据采集系统,要求每分钟向上位机发送32字 ;节的采集数据 ;通讯波特率9600波特,系统晶振11.0592MHz,数据采用校验和方式进行 ;校验。 ;当接收方接收的数据出错时,向发送方发送ASCII码E,否则发送R。 ;若发现接收错误,发送方应该重发数据。 S_END BIT 00H ;发送完毕标志 ACK BIT 01H ;应答标志 OK BIT 02H ;接收正确标志 MIN BIT 03H ;分钟标志 CR2 EQU 0AH CR3 EQU 0BH ;1区R2,R3 BR0 EQU 10H BR2 EQU 12H ;2区R0,R2 LEN EQU 32 ;数据块长度 ADDR1 EQU 30H ;数据块首地址 ORG 0 LJMP START ;转入主程序 ORG 0BH LJMP TS ;转入T0中断服务程序 ORG 23H LJMP TR ;转入串口中断服务程序 ORG 30H START: MOV SP,#60H ;设置堆栈 MOV TMOD,#21H ;设T0为方式1,T1为方式2,定时器 MOV TH0,#4CH ;T0的50ms定时初值 MOV TL0,#0 MOV TH1,#0FDH ;9600波特的定时初值 MOV TL1,#0FDH SETB PT0 ;设T0为高级中断 SETB ET0 ;允许T0中断 ANL PCON,#7FH ;SMOD=0 MOV SCON,#50H ;设串口为方式1,允许接收 SETB ES ;允许串口中断 SETB EA ;开CPU中断 SETB TR0 ;启动T0计数 SETB TR1 ;启动T1计数 MOV CR2,#20 ;50ms中断次数计数初值送1区R2 MOV CR3,#60 ;60秒计数初值送1区R3 CLR S_END ;清发送完毕标志 CLR ACK ;清应答标志 CLR OK ;清接收正确标志 CLR MIN ;清1分钟到标志 LOOP: JNB MIN,$ ;1分钟没到则等待 CLR MIN ;清1分钟到标志 MOV R2,#LEN ;待发送数据块长度送R2 MOV R0,#ADDR1 ;待发送数据块首址送R0 CLR A ;清累加器A L1: ADD A,@R0 ;以下这个循环用来计算检查和 INC R0 DJNZ R2,L1 MOV @R0,A ;存检查和 L2: MOV BR2,#LEN+1 ;发送的字节数送2区R2 MOV BR0,#ADDR1 ;发送数据块首址送2区R0 MOV A,ADDR1 ;取待发送的第一个字节 MOV SBUF,A ;发送第一个字节 JNB S_END,$ ;没有发送完毕就等待 CLR S_END ;清发送完毕标志 JNB ACK,$ ;没有应答则等待 CLR ACK ;清应答标志 JNB OK,L2 ;接收方返回错误代码则重发 SJMP LOOP ;转到下一次等待 TS: PUSH PSW ;保护现场 SETB RS0 ;选择1区工作寄存器 CLR RS1 CLR TR0 ;停止T0计数 MOV TH0,#4CH ;送50ms定时初值 MOV TL0,#0 SETB TR0 ;启动T0计数 DJNZ R2,TS1 ;中断不够20次则返回 MOV R2,#20 ;中断次数初值送R2 DJNZ R3,TS1 ;不够60秒则返回 MOV R3,#60 ;60秒计数初值送R3 SETB MIN ;一分钟到,置MIN标志 TS1: POP PSW ;恢复现场 RETI ;中断返回 TR: PUSH PSW ;保护现场 PUSH ACC CLR RS0 ;选2区R寄存器 SETB RS1 JNB TI,SR2 ;不是发送缓冲器空中断则转移 CLR TI ;清TI标志 DJNZ R2,SR1 ;没有发送完则转移 SETB S_END ;置发送完毕标志 SJMP SR2 SR1: INC R0 ;指向下一个要发送的字节 MOV A,@R0 ;取要发送的字节 MOV SBUF,A ;发送 SJMP SR4 SR2: JNB RI,SR4 ;不是接收缓冲器满中断则转移 CLR RI ;清RI标志 SETB ACK ;置应答标志 MOV A,SBUF ;取接收的数据 CJNE A,#‘R’,SR3 ;接收的数据不是“R”则转移 SETB
文档评论(0)