《AVR汇编百例 - 晋级篇 - 参考程序.docx》由会员分享,可在线阅读,更多相关《AVR汇编百例 - 晋级篇 - 参考程序.docx(32页珍藏版)》请在第壹文秘上搜索。
1、:范例91.ORG0.EQUDTPINT-S180.EQUDRPINT=SICOOUTUCR.R16;允许UART接收和发送.8位数据模式INCK15;指向1#分机OUT1.P:OUIrUDR,R15:呼分机号,1:12:2S/03:3/04TS1.OP:INR16,USRSBRSR16.7RJMPTS1.OP;分机返回机号?INR16,UDRCPR16,R15:分机号正确返回?BRNEOUT1.P1.DIR16JIC:改为9位数据模式TXB8=0OUTUCR,R16TX1.OP:1.DR16,X+OUTUDR.R16:向分机发送数据块R1.6,S18TBST1.:INR17.1.SR;以下提
2、供几个补充参考程序,都带有详细说明和指令注称.它们是主从多机遹讯程序,采;用中断方式写入EEPMM直接对晶振分频产生0.1秒和秒号的精确定时程序,以及RS-232/;RST85标准转换程序,AVR频率计程序,申行时铺口历芯片OS1302读写,共现时法的PUM输出、;猿入捕获测周期程序和定时信号获取,以及DS18B20测湿等程序.多机通讯主要用8和9(数;据模式区分被选分机(9位)和其它分机(8位),到达主机只与被选分机交换数据之目的.以中;断方式写Ef-TROM的优点是可与系统运行同时进行(即在规写入),占用很少机时.:精确定时用定时/计数器1(或0)直接对MeU主频(不设分领)设定时间常数,
3、分频精度可到达;1HZ.RS-232/RS-185标准转换程序中AVR不作中转,使两种器件相关脚位也接连接.以TCNTO;定时,以TO引脚接收RS232数楙.以收到RS232字符起始位下跳沿或结束符($03)为依据.;控制切换RST85的收发使能.(系统中的主AVR可兼做对通信标准之监控转换,即只是在完成;主要工作任务的同时附带进行),具体过程不再细述.申行时铺口历芯片DS1302具体积小,;可擢性高,与单片机连接方便等优点.;以下程序请参看有关章节或程序中的注择;多机通讯主机程序/晶振4WIZ:以8/9位数据模式区分被选/未被选分机通讯:IJBRR,12波特率19200(RE1.ERR.-0
4、.16%):主机对I瓦2W,3#,,信分机发送数据块在S180T8F,$190-19E$1AOTAD和S1.BO-IBFSTRT38:RJMPRST38:主机从1.a,2,3*,,信分机接收数据块在S1.CO-ICF,$1DO-1DF,$1EoTEF)和$1FOTFF.ORG$00BRJMPSTRT38.ORG$00CRJMPSTRT38:主机不设申口中断,只以杳询接收.ORG$011RST38:1.DIR16,12OUTUBRR,R16:设波特率:BAUDKATE=FCP/16(UBRR+1)C1.RR15初始化分机号1.DIR27,HIGH(DTPINT)1.DIR26.1.OW(DTPI
5、ND:发送数据指针(首指$180)1.1)1R29.HIGH(DRPINT)1.DIR28.1.OW(DRPIND:接收数据指针(首指$1CO)NEXTNO:1.DISBRSRJMPR17.5TEST1.:等待发送完成CPIR1.6,SOABRNETX1.OP*RXTST:INR17.USRSBRSR17,7:RXC=I收到数据RJMpRXTST;等待接收分机返回数据块INR16,UDRSTY+.R16:存储接收数据CPIR16,30A:分机数据块发完?BRNERXTSTMOVR16,R15CPIR16.4;与分机轮询通讯完毕?BRNENEXW:未完转对下一分机通信H38:RJMpIIH38;
6、否则踏步(可改为处理分机返回的数据,之后再进行下一个轮询.DSEG.ORG$180DTPIW:.BYTE$40;$11$45$65$73$46$42$10S6FS33$的$66$5CSWSIB$0DSOA:$42S1.F$66$78$47$45$44$63$32$48$60$7C$6D$45$0DSOA:$43$56$55$53$4D$4F$40S2ES31$42$67$4C$47$4A30DSOA;$15$54$59$63$3D$4B$48S2F635$48$69$3C$77$43$0DSOA.ORGS1.CODRPINT:.BYTE$10;范例92.ORG0:多机通讯IU分机程序/品版4M
7、IIZ.EQUDTPIT1.-S180:,不予接收;保存当前状态TSTR18BREQN1.MIi:(R18)=0时收到数据,只可能是机号,转去核实PUSHR16;否则为主机向本分机发来数据块(9位模式,机号已符合)PUSHR26PUSHR27INK17.1.DR:接收数据MOVXH,R8MOVX1.R9;取接收数据指针STX,R17:转入RAYMOVR8,X1.1.MOVR9,X1.;存数据指针CPIR1.7,$OA:是数据块结束符1F?BRNERSCOM1.SBRR18.$80:收到完整数据块标志RSCOM1.:POPR27POPR26POPR16DRETI:OUTSREG1RHRETIN1
8、.三:INR17,IW:取出数据CP1.R17.1:是体分机?2#分机与$02比较/3#分机与603比较.BRNEDRETI;机号不符合,转!SBRR18.340;也机号符合标志RJMPDKETI:UART中断发送程序UATXC:PUSHR16;r6r7:发送数据指针,首指$180INR16.SREGPUSHR16PUSHR26PUSHR27MOVM1.R6MOVX1.,R7:取出发送指针1.DR16,X+;取数据,调指针MOVR6,XHMOVR7.X1.OUTUDR,R16:送入发送存放牌CPIRI6,$0ABRNESDCOMCBIUCR.5:发送最后1个字符后,禁止发送存放潺空中断(C1.
9、RIDRIE)1.DIR16,I1.1.GII(DKPIfJT)MovR8,R161.DIR16,1.0W(RINT)MOVR9,R16;接收数据指针初始化(POINTTOS1.CO)SDCOM:POPR27POPR26POPR16OUTSREG.R16POPR16RETI.DSEG.ORG$180DTPITk-BYTE$10-ORGS1.CODRPNT1:.BYTE$10;S11S15$65$73$46$42$40$61:$33$44$66$5C$4D$4BSODS0;范例93:以中断方式写入EEPRoM(仅对8535.8515无此功能),克服查询方式占用过多机时的跳点.;并可在处写入;运作
10、过程特点如下:;主程序初始化时设置EEPROM就绪(ready)中断使能位和中断总使能位;(2)在主程洋中写入第一个字节,写入完成后引起就绢中断,其他写入在中断效劳中完成;(3)本程序为一写入特例.写入地址为$100-$IFF,可作适当修改(如设块长计数器等)MQ为防止离优先级中断破坏写入过程,中断效劳中不允许中断嵌套;(5)本例为简化程序只以查询写入地址循环作为背景程序,实用时UJ改为具体的背景序;(6)如能确信当前系统没有EEPROM正在写入,可删除对其进行查询局部.SI1.I-EP:1.1)1R16,IIIGH(amend)OUTSP1.1.1R161.DIR16.1.OW(ra?nd)
11、OUTSP1.RI6SBIEECR,3;设置EEPROM就绪(ready)中断使能位SEI:中断总使能RJMPSKIW.ORG$00FRJMPEEPRDY;8535EEPROM就绪(ready)中断向嵬SRTf:1.DIYIU1.1)1Y1.0;EEPROM写入首地址:$1001.DIX1.,$60;欲写入数据块首地址:S60C1.RXIIWEEPO:SBICEECR,1:当前有EEPRoM写入操作,有则等待写入完成RJMPWEEPORCA1.1.WREEP;写入第一个字节,($60)-5100,写入完成后,EEWE=O时引发EEPRoY就绪中断INCY1.;调整写入地址指针HHWEEP:TSTY1.BRNEHHWEEPCP1.