版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、; 以下提供几个补充参考程序,都带有详细说明和指令注释.它们是主从多机通讯程序,采;用中断方式写入EEPROM,直接对晶振分频产生0.1秒和秒号的精确定时程序,以及RS-232/;RS-485标准转换程序,AVR频率计程序,串行时锺日历芯片DS1302读写,共享时基的PWM输出、;输入捕获测周期程序和定时信号获取,以及DS18B20测温等程序.多机通讯主要用8和9位数;据模式区分被选分机(9位)和其它分机(8位),达到主机只与被选分机交换数据之目的.以中;断方式写EEPROM的优点是可与系统运行同时进行(即在线写入),占用很少机时.;精确定时用定时/计数器1(或0)直接对MCU主频(不设分频)
2、设定时间常数,分频精度可达到;1HZ.RS-232/RS-485标准转换程序中AVR不作中转,使两种器件相关脚位直接连接.以TCNT0;定时,以T0引脚接收RS-232数据.以收到RS-232字符起始位下跳沿或结束符($03)为依据,;控制切换RS-485的收发使能.(系统中的主AVR可兼做对通信标准之监控转换,即只是在完成;主要工作任务的同时附带进行).具体过程不再细述.串行时锺日历芯片DS1302具体积小,;可靠性高,与单片机连接方便等优点.; 以下程序请参看有关章节或程序中的注释。 ;范例91 ;多机通讯主机程序/晶振4MHZ .ORRG 00 ;以8/9位位数据模式区区分被选/未未被选
3、分机通通讯.EQU DTPINNT=$1880 ;UUBRR=112 波特率率192000(REL.ERR.=0.16%).EQU DRPINNT=$1CC0 ;主主机对1#,2#,3#,4#分机机发送数据块块在$1800-18F,$190-19F,$1A0-11AF)和$1B0-11BFSTRT38: RJMPP RSST38 ;主主机从1#,2#,3#,4#分机机接收数据块块在$1C00-1CF,$1D0-1DF,$1E0-11EF)和$1F0-11FF .ORRG $00B ; RJMMP SSTRT388 .ORRG $00C RJMMP SSTRT388 ;主机不设设串口中断,只只以
4、查询接收收 .ORRG $011RST38: LDI R16,12 OUTT UBBRR,R116 ;设波特率:BAUDD RATEE=FCP/16(UBBRR+1) CLRR R115 ;初初始化分机号号 LDII R227,HIGGH(DTPPINT) LDII R226,LOWW(DTPIINT);发发送数据指针针(首指$1180) LDII R229,HIGGH(DRPPINT) LDII R228,LOWW(DRPIINT);接接收数据指针针(首指$11C0)NEXTNO: LDI R166,$18 OUTT UCCR,R166 ;允许UAART接收和和发送,8位位数据模式 INCC
5、 R115 ;指指向1#分机机OUTLP: OUT UDR,R15 ;呼呼分机号,11:1#/22:2#/003:3#/04:4#.TSLOP: IN R166,USR SBRRS RR16,7 RJMMP TTSLOP ;分机返回机机号? IN RR16,UDDR CP RR16,R115 ;分机号号正确返回? BRNNE OOUTLP LDII R116,$1CC ;改为9位位数据模式 TXB8=0 OUTT UCCR,R166 ;TXLOP: LD R166,X+ OUTT UDDR,R166 ;向分机发发送数据块TESTL: IN R177,USR SBRRS RR17,5 RJMMP
6、 TTESTL ;等待发送完完成 CPII R116,$0AA BRNNE TTXLOP ;RXTST: IN R177,USR SBRRS RR17,7 ;RXC=11 收到数据据 RJMMP RRXTST ;等待接收分分机返回数据据块 IN RR16,UDDR ST YY+,R166 ;存储接收收数据 CPII R116,$0AA ;分机数据据块发完? BRNNE RRXTST MOVV R116,R155 CPII R116,4 ;与与分机轮询通通讯完毕? BRNNE NNEXTNOO ;未完转对对下一分机通通信HH38: RJMPP HHH38 ;否则踏步(可可改为处理分分机返回的数数
7、据,之后再再进行下一个个轮询) .DSSEG .ORRG $180DTPINT:.BYTEE $440 ;$441 $455 $65 $73 $46 $442 $400 $6F $33 $44 $666 $5CC $4D $4B $0D $00A ;$442 $4FF $66 $78 $47 $445 $444 $63 $32 $48 $660 $7CC $6D $45 $0D $00A ;$443 $566 $55 $53 $4D $44F $400 $2E $31 $42 $667 $4CC $47 $4A $0D $00A ;$445 $544 $59 $63 $3D $44B $488
8、 $2F $35 $48 $669 $3CC $77 $43 $0D $00A .ORRG $1C0DRPINT:.BYTEE $440;范例92 .ORRG 00 ;多机通讯11#分机程序序/晶振4MMHZ.EQU DTPITT1=$1880 ;(UUBRR)=12 波特特率为192200(REEL.ERRR.=0.116%).EQU DRPNTT1=$1CC0STRT39: RJMPP RSST39 .ORRG $00B RJMMP UUARXC ;8535UUART接收收完成中断 .ORRG $00C RJMMP UUATXC ;UART发发送完成中断断 .ORRG $011RST39:
9、 CLR R18 ;清除分分机被选中(RR18,6)和和主机数据块块接收完毕标标志(R188,7) LDII R116,12 OUTT UBBRR,R116 ;设波特率BAUD RATE=40000000/166*(12+1)=199200 LDII R116,HIGGH(DRPPNT1) MOVV R88,R16 LDII R116,LOWW(DRPNNT1) MOVV R99,R16 ;r8,r99:接收数据据指针(FIIRST PPOINT TO $11C0) LDII R116,$988 ;允许UAART中断接接收,8位数数据模式 OUTT UCCR,R166 SEIIRXDTS: S
10、BRS R188,6 ;主机机呼号已收到到(若收到,在在R17中)? RJMMP RRXDTS OUTT UDDR,R177 ;返还该机机号TXDON: IN R166,USR SBRRS RR16,5 RJMMP TTXDON ;该机号发送送完成? LDII R116,$9CC ; 允许UUART中断断接收,9位位数据模式,TTXB8=00 OUTT UCCR,R166 RCVBLK: SBRSS R118,7 RJMMP RRCVBLKK ;主机发来来数据块已接接收完毕? LDII R116,HIGGH(DTPPIT1) MOVV R66,R16 LDII R116,LOWW(DTPIIT
11、1) MOVV R77,R16 ;设发送数据据指针r6rr7,首指$180 LDII R116,$3CC ;允许UAART中断发发送,9位数数据模式,TTXB8=00 OUTT UCCR,R166TXDN: SBICC UCCR,5 RJMMP TTXDN ;发送完毕毕? RJMMP RRST39 ; :UAART中断接接收程序UARXC: SBIC USRR,4 RETTI ;祯错错误(主机正正与其它分机机进行9位数数据模式通信信),不予接接收 IN RR14,SRREG ;保存当前前状态 TSTT R118 BREEQ NNUMB ;(R188)=0时收收到数据,只只可能是机号号,转去核实
12、实 PUSSH RR16 ;否则为主机机向本分机发发来数据块(99位模式,机机号已符合) PUSSH RR26 PUSSH RR27 IN RR17,UDDR ;接收数数据 MOVV XHH,R8 MOVV XLL,R9 ;取取接收数据指指针 ST XX+,R177 ;转入RAAM MOVV R88,XH MOVV R99,XL ;存存数据指针 CPII R117,$0AA ;是数据块块结束符LFF? BRNNE RRSCOM11 SBRR R118,$800 ;收到完整整数据块标志志RSCOM1: POP R277 POPP R226 POPP R116DRETI: OUT SREGG,R1
13、4 RETTINUMB: IN R117,UDRR ;取出数据据 CPII R117,1 ;是是1#分机?2#分机与与$02比较较/3#分机机与$03比比较. BRNNE DDRETI ;机号不符合合,转! SBRR R118,$400 ;建机号符符合标志 RJMMP DDRETI; UUART中断断发送程序UATXC: PUSH R166 ;r66 r7:发发送数据指针针,首指$1180 IN RR16,SRREG PUSSH RR16 PUSSH RR26 PUSSH RR27 MOVV XHH,R6 MOVV XLL,R7 ;取取出发送指针针 LD RR16,X+ ;取数据,调调指针 M
14、OVV R66,XH MOVV R77,XL OUTT UDDR,R166 ;送入发送送寄存器 CPII R116,$0AA BRNNE SSDCOM CBII UCCR,5 ;发发送最后1个个字符后,禁禁止发送寄存存器空中断(CLR UUDRIE) LDII R116,HIGGH(DRPPINT) MOVV R88,R16 LDII R116,LOWW(DRPIINT) MOVV R99,R16 ;接收数据指指针初始化(PPOINT TO $11C0)SDCOM: POP R27 POPP R226 POPP R116 OUTT SRREG,R116 POPP R116 RETTI .DSS
15、EG .ORRG $180DTPIT1:.BYTEE $440 .ORRG $1C0DRPNT1:.BYTEE $110 ;$441 $455 $65 $73 $46 $442 $400 $6F $33 $44 $666 $5CC $4D $4B $0D $00A;范例93 ;以中断方式式写入EEPPROM(仅仅对85355,85155无此功能),克服查询方方式占用过多多机时的缺点点, ;并可在线写写入 ;运作过过程特点如下下: ;(1)主主程序初始化化时设置EEEPROM就就绪(reaady)中断断使能位和中中断总使能位位 ;(2)在在主程序中写写入第一个字字节,写入完完成后引起就就绪中断,
16、其其他写入在中中断服务中完完成 ;(3)本本程序为一写写入特例,写写入地址为$100-$1FF,可可作适当修改改(如设块长长计数器等) ;(4)为为防止高优先先级中断破坏坏写入过程,中中断服务中不不允许中断嵌嵌套 ;(5)本本例为简化程程序只以查询询写入地址循循环作为背景景程序,实用用时可改为具具体的背景序序 ;(6)如如能确信当前前系统没有EEEPROMM正在写入,可可删除对其进进行查询部分分.STWEEP: LDI R166,HIGHH(rameend) OUTT SPPH,R166 LDII R116,LOWW(rameend) OUTT SPPL,R166 SBII EEECR,3 ;
17、设置EEPPROM就绪绪(readdy)中断使使能位 SEII ;中中断总使能 RJMMP SSRTW .ORRG $00F RJMMP EEEPRDYY ;85355 EEPRROM就绪(readyy)中断向量量SRTW: LDI YH,1 LDII YLL 0 ;EEPROOM 写入首首地址:$1100 LDII XLL,$60 ;欲写入数据据块首地址:$60 CLRR XHHWEEP0: SBIC EECCR,1 ;当当前有EEPPROM写入入操作,有则则等待写入完完成 RJMMP WWEEP0 RCAALL WREEPP ;写入第一一个字节,($60)-$1000,写入完成成后,EEW
18、WE=0时引引发EEPRROM就绪中中断 INCC YLL ;调整整写入地址指指针HHWEEP: TST YL BRNNE HHHWEEPP CPII YHH,2 ;写入地址达达到$2000后,写入完完成 BRNNE HHHWEEPP CBII EEECR,3 ;禁止EEPPROM就绪绪(readdy)中断WDON: RJMPP WDDON ;踏步EEPRDY: IN R66,SREGG PUSSH RR16 RCAALL WREEPP ;写入一个个字节 INCC YLL BRNNE WWRETI INCC YHH ;EEEPROM末末地址为$11FFWRETI: POP R16 OUTT S
19、RREG,R66 RETTIWREEP: OUT EEARRH,YH ; OUTT EEEARL,YYL ;写入地址送送入EEARR LD RR16,X+ ;取数据,调调指针 OUTT EEEDR,R116 ;数据写入EEEPROMM数据寄存器器 SBII EEECR,2 ;设置EEPPROM写入入总使能位EEEMWE SBII EEECR,1 ;设置EEPPROM写入入使能位EEEWE RETT;范例94 ;精确定时产产生0.1秒秒信号 ;用定定时/计数器器1定时,不不分頻定出00.1秒信号号,由PC55脚输出正脉脉冲。 ;晶体体4.0000119MHHZ,计4000012个个数定出0.1秒
20、信号 ;对定定时/计数器器1重装常数数进行加法补补偿(扣除自自然计数和补补偿占用时间间). ;加法法补偿若产生生进位,将中中断次数减11 .ORRG $000 ;精确定时时产生0.11秒信号STRT24: RJMPP RSST24 .ORRG $006 ;85155 t1 ooverfllow veector RJMMP TT1_OVFFL ;4000012=665536*7-587740=7*$100000-$E5574/故TTCC=$EE574 .ORRG $00D RST24: LDI R16,HIGH(ramennd) OUTT SPPH,R166 LDII R116,LOWW(ram
21、eend) OUTT SPPL,R166 SBII DDDRC,5 ;PC5,00.1秒号输输出(高有效效) CBII POORTC,55 LDII R116,1 ;不不分頻 OUTT TCCCR1B,R16 LDII R116,$E55 OUTT TCCNT1H,R16 LDII R116,$744 OUTT TCCNT1L,R16 ;写入时时间常数TCCC LDII R116,$800 OUTT TIIMSK,RR16 ;允许定时时/计数器11溢出中断 LDII R116,7 ;77次中断输出出0.1秒号号 MOVV R66,R16 SEII ;中中断总使能HH1A: RJMPP HHH1
22、A ;T1_OVFLL:PUSHH R116 PUSSH RR17 IN RR7,SREEG DECC R66 ;中断断次数减一 BRNNE GGOON100 ;0.1秒秒时间到? LDII R116,7 MOVV R66,R16 ;重新装入中中断次数 SBII POORTC,55 ;0.1秒秒号输出前沿沿 IIN R17,TCNT11L ;* IIN R16,TCNT11H ;*读入TCCNT1自然然计数值 LLDI R18,$7C ;*TTCC=$EE574 AADD R17,RR18 ;*TTCC+8=$E57CC LLDI R18,$E5 ;*88条单周期补补偿指令占用用8个时钟周周期
23、 AADC R16,RR18 ;*修修正后TCCC=$E5774+(TCCNT1)+8 OOUT TCNT11H,R166 ;* OOUT TCNT11L,R177 ;*重新装入补补偿修正后的的TCC BRCCC GGOON099 DECC R66 ;加法法补偿若产生生进位,将中中断次数减11GOON09: ;. ;数据处处理略 ;. ;. ;. ;. RCAALL ACLK11 ;0.1秒走时软软时钟 RJMMP GGOON111GOON10: CBI PORRTC,5 ;输出信号后后沿GOON11: POP R177 POPP R116 OUTT SRREG,R77RETI;范例95 ;用
24、定定时/计数器器1定时,不不分頻定出11秒信号,由由PC5脚输输出正脉冲 ;晶体体4.0000133MHHZ,计400001333个数定出11秒信号 ;对定定时/计数器器1重装常数数进行加法补补偿(扣除自自然计数和补补偿占用时间间). ;加法法补偿若产生生进位,将中中断次数减11 .ORRG $000 ;精确定时时产生秒号 STRT25: RJMPP RSST25 .ORRG $006 RJMMP TT1_OVFFB ;40000133=62*655536-663099=62*$110000-$F67BB/故TCCC=$F677B .ORRG $00D RST25: LDI R16,HIGH(
25、ramennd) OUTT SPPH,R166 LDII R116,LOWW(rameend) OUTT SPPL,R166 SBII DDDRC,5 ;PC5输出出秒信号(正正脉冲) CBII POORTC,55 LDII R116,1 ;不不分頻 OUTT TCCCR1B,R16 LDII R116,$F66 ; OUTT TCCNT1H,R16 ;写入TTCC高8位位 LDII R116,$7BB ; OUTT TCCNT1L,R16 ;写入TTCC低8位位 LDII R116,$800 ; OUTT TIIMSK,RR16 ;允许T/C1溢出中中断 LDII R116,62 ;62次中
26、断断定出秒号 MOVV R66,R16 SEII ;HH1B: RJMPP HHH1B ;等待中断T1_OVFBB:PUSHH R116 PUSSH RR17 IN RR7,SREEG DECC R66 ;到662次中断? BRNNE GGOON122 LDII R117,62 MOVV R66,R17 ;重装中断次次数 SBII POORTC,55 ;输出秒信信号 IN RR17,TCCNT1L ;* IN RR16,TCCNT1H ;*读读入T/C11自然计数值值 LDII R118,$833 ;*TCCC=$F677B ADDD R117,R188 ;*TCCC+8=$FF683 LDI
27、I R118,$F66 ;*8条单单周期补偿指指令占用8个个时钟周期 ADCC R116,R188 ;* OUTT TCCNT1H,R16 ;* OUTT TCCNT1L,R17 ;*重新新装入补偿修修正后的TCCC BRCCC GGOON199 DECC R66 ;加法法补偿若产生生进位,将中中断次数减11GOON19: ;. ;数据处处理略 ;. ;. ;. ;. RJMMP GGOON133GOON12: CBI PORRTC,5 ;秒号后沿GOON13: POP R177 POPP R116 OUTT SRREG,R77RETI ;范例例96;运作特点如下下:;此程序为一完完整频率测量
28、量显示程序,所测频率较较高(2MHHZ),使用用4兆晶振;程序兼有启动动看门狗及对对其管理功能能;以TCNT00精确定时输输出秒号作为为捕获信号,用TCNTT1对被测信信号频率计数数;用TCNT00直接对(88515)44兆晶振计数数产生秒号,定时精度达达1Hz 主主常数选为2256(即00);由PA0输出出精确定时产产生的秒信号号(与ICPP脚相连)捕捕获TCNTT1计数值,相减计算频频率;将频率转换为为十进制数,装入显示缓缓存区,调DDSPA子程程序显示之(参参考范例277和图4-55);重装TCC时时对TCC进进行修正,若若修正(减法法)计算不产产生借位,将将中断次数nn减1;被测频率可
29、近近2兆,故须须设1字节扩扩展计数器,以tcntt1溢出中断断对其计数(共3字节计计数器);在TCNT11捕获中断服服务中,以33字节减法计计算频率,并并置位T标志志;若TCNNT1溢出标标志置位;必须提前增11扩展计数器器,并将TCCNT1溢出出标志清除(不再增1扩扩展计数器),再计算频频率.;TCNT1溢溢出中断优先先级高于TCCNT0,故故TCNT11中断服务可可能影响秒号号精度,导致致测量误差;可以排队法剔剔除坏值,即即将几个连续续采样按大小小顺序排队,掐头去尾只留中间再再作平均.;也可以监视LLED显示,连续3秒稳稳定显示(高高频测量允许许有2Hz误误差)即为所所测频率正确确值.;若
30、晶振采用112兆,被测测信号频率(暂空比1:1或接近11:1)可接接近6兆. .ORRG $000 STRT26: RJMPP RSST26 ;实实测85155晶振频率44.0001167MHZZ 计40000167个个数为1秒 .ORRG $003 RJMMP TT1_CAPPT ;T/CC1捕获中断断 .ORRG $006 RJMMP TT1_OVRRF ;T/CC1溢出中断断 .ORRG $007 RJMMP TT0_OVFFB ;T/CC0溢出中断断 .ORRG $00D ;40000167=2256*155626-889=2566*$3D00A-89/故TCC=89 n=156266
31、RST26: LDI R16,HIGH(ramennd) OUTT SPPH,R166 LDII R116,LOWW(rameend) OUTT SPPL,R166 SBII DDDRA,0 ;PA0输出出秒定时信号号,捕获频率率计数值 CBII POORTA,00 ;初始为低低 CLRR R222 CLRR R221 CLRR R220 ;RR20,R221,R222为频率量瞬瞬时计数采样样 CLRR R22 WDRR LDII R116,$0DD ;启动看门门狗,溢出时时间为0.449 OUTT WDDTCR,RR16 ;写入看门门狗控制寄存存器 CLRR XHH LDII XLL,$6C
32、 ;set tthe diisplayy bufffer poointerrT26LP: ST X+,R2 CPII R226,$744 BRNNE TT26LP ;清除$6CC-$733 LDII R116,$011 ;T/C00为定时器,不不分频 OUTT TCCCR0,RR16 LDII R116,89 ; OUTT TCCNT0,RR16 ;写TCCC到TCNTT0 LDII R116,$C66 ;上升沿捕捕获,允许噪噪音滤除,外外部脉冲计数数 OUTT TCCCR1B,R16 LDII R116,$8AA ;允许T/C1捕获,溢溢出以及T/C0溢出中中断 OUTT TIIMSK,RR
33、16 ; LDII R116,$3EE ;设156626(=$3D0A)次中断(高高位字节已增增1) MOVV R11,R16 ; MOVV R119,$0AA ; SEII ;HH1C: BRTSS HHH2C ;已采集到频频率? RCAALL DSPA ;仍显示示原数据 RJMMP HHH1C HH2C: CLT ;频率率量已在R33,R4,RR5 MOV RR9,R3 MOVV R10,RR4 MOV RR11,R55 RCAALL CONV11 ;翻为十进进制数(R112R13RR14R155252 253 2254 2555 | 00 1 2 3 4 55.加法法计数方向-GOON1
34、3: POP R166 ; | | | | | | | | | | | OUTT SRREG,R88 ;| RETTIT1_OVRFF:IN R118,SREEG ;TCNT11溢出中断服服务 INCC R33 ;R33为TCNTT1扩展字节节 OUTT SRREG,R118 RETTIT1_CAPTT:IN R66,SREGG ;T/C11捕获中断 PUSSH RR16 IN RR5,ICRR1L IN RR4,ICRR1H MOVV R116,R222 MOVV R222,R5 SUBB R55,R16 MOVV R116,R211 MOVV R221,R4 ;与上一次采采集的频率量量相减
35、,得到到频率值 SBCC R44,R16 IN RR16,TIIFR SSBRS R16,7 RRJMP T1CPP1 IINC R3 ;8515TTCNT1溢溢出中断,预预先对扩展字字节计数 LLDI R16,$80 ;并将将溢出标志清清除,(中断断返回后不再再计数) OOUT TIFR,R16 ;清除TTIFR,77T1CP1: MOVV R116,R200 MMOV R20,RR3 SSBC R3,R116 ;采集频频率量在R33,R4,RR5 SSET ;建采集频频率量标志 PPOP R16 OOUT SREG,R6 RRETI;范例97 ; 本时基基资源共享式式综合测量系系统,具有精
36、精确定时PWWM输出、输输入捕获测外外部信号;周期、获取TTCNT1溢溢出中断信号号等多种功能能。特点是TTCNT1启启动之后即不不停运行。; 时基资资源共享式PPWM的特点点在于装入比比较匹配寄存存器之数据方方式,它不是是在比较;匹配达到时清清除定时/计计数器,再装装入高(或低低)电平时间间常数:而是是当比较匹配配;达到时以定时时/计数器当当前值加上时时间常数后将将和装入比较较匹配寄存器器,二者效果果;是相同的。可可称前者为静静态设置,后后者为动态设设置。后者因因不停运行定定时/计数器器;,其资源可同同时用于输出出比较匹配AA及B、输入入捕获、定时时信号输出等等等。; 本程序序使用晶体标标称
37、值4MHHZ实测为44,000,2236HZ。使使用定时/计计数器1直接接;对主频精确定定时设定PWWM高低电平平的维持时间间。以ICPP脚输入被测测周期脉冲信信号。; 本程序序PWM之暂暂空比与范例例51相同,为为5毫秒(高高):10毫毫秒。故维持持;高电平的时间间常数为4,0000,2336200=200,001,维维持低电平的的时间常数为为;4,000,2236100=440,0022。此即输出出比较匹配AA达到时交替替写入比较匹匹配寄;存器OCR11A之对TCCNT1当前前内容的超前前值。; 因以TTCNT1直直接对主频计计数,频率高高周期短,输输入捕获的外外部信号周期期不能;大于65
38、53364,0000,236=0.016638(秒)即即16.388毫秒(但也也不能太小,对对频率;较高的脉冲信信号应改为测测频率)。以以相邻两次捕捕获值相减之之差除以主频频得到被测信信;号之周期(单单位为秒)。; 为避免免小数除法运运算,可将相相邻两次捕获获值相减之差差先乘以1,0000,再将将乘积;除以主频,将将得到以毫秒秒为单位的周周期值;考虑虑到除法子程程序DIV116只实现整整数;除法,且除数数不能大于665535,可可将主频缩小小100倍,即即以40,0002作除数数,故;除得之商扩大大了100倍倍。这样将整整数商二翻十十后,其末两两位皆为小数数。本程序采采用;这种计算方法法。并在
39、主循循环程序中调调DSPA子子程序显示所所测周期值。; 若将以以上算法中乘乘以1,0000改为乘以以10,0000,并增加加对商的万位位转换,;其余保留不变变,则所得商商数末3位皆皆为小数位。本本算法精度高高于上一种方方法,如有;提高测量精度度之必要,应应采用后种算算法。; 若扩大大测量信号周周期,应对TTCNT1溢溢出信号计数数,做3字节节减法(见范范例96);后再计算被测测信号周期(除除以4,0000,2366)。所测信信号周期可达达4.1944秒。; 本示例例定时精度可可与范例511做如下比较较:本例中高高低电平分别别对主频计数数;20,0011个和40,0002个。范范例51中高高低电
40、平分别别对主频计数数19,9668个和;40,0000个。本示例例定时精度明明显高于范例例51。; 本示例例TCNT11产生溢出中中断之周期为为16.388毫秒,其频频率约为611HZ。在TTCNT1;溢出中断服务务子程序中由由PA3以正正脉冲形式输输出该信号。 .ORRG $000 ;UUSE 85535STRT43: RJMPP RSST43 ;55.00000MS(高):9.99999MS(低) 晶振振4,OOOO,236HHZ .ORGG $0005 RJMPP T1_CP43 ;T/C1输输入捕获中断断 .ORRG $006 RJMMP TT1_CA443 ;T/C1输输出比较匹配配
41、A中断 .OORG $008 RJMPP T1_OV43 ;TCCNT1溢出出中断 .ORRG $011RST43: LDI R16,HIGH(RAMENND) OUTT SPPH,R166 LDII R116,LOWW(RAMEEND) OUTT SPPL,R166 LDII R116,$800 ;T/C11比较匹配AA达到时,清清除输出脚OOC1A OUTT TCCCR1A,R16 LDII R116,$411 ;不分频,比比较匹配达到到不清TCNNT1;上升升沿捕获/禁禁止噪音滤除除 OUTT TCCCR1B,R16 SBII DDDRD,5 SBII POORTD,55 ;PD5(OC
42、1A)初始化输出出为高 SBII DDDRA,3 ;PA3为TTCNT1溢溢出中断信号号输出 CBII POORTA,33 ;PPA3输出为为低 LDII R116,$4EE OUTT OCCR1AH,R16 LDII R116,$211 ;写比较匹匹配寄存器($4E211=200001脉宽5毫毫秒) OUTT OCCR1AL,R16 LDII R116,$344 ;允许输入入捕获/输出出比较匹配AA/TCNTT1溢出中断断 OUTT TIIMSK,RR16 CLRR R21 CLRR R200 ;捕获获值暂存单元元 CLRR XH LDII XL,$6CCLR43: ST XX+,R200
43、CPII XL,$74 BRNNE CLLR43 ;清清除显示区$6C-$73 SEIIHH43: RCALLL DSSPA ;背景程序:显示捕获频频率信号之周周期,单位:毫秒 BRTTC HHH43 RCAALL FIL2 ;T=11,已捕获到到数据在R44,R5/先先关显示 CLTT MOVV R144,R4 MOVV R155,R5 LDII R166,3 MOVV R122,R16 LDII R166,$E8 ;取立即数11000(=$3E8) MOVV R133,R16 RCAALL MMUL16 ;乘以10000 LDII R166,$9C ;使周期单位位为毫秒 MOVV R100
44、,R16 LDII R166,$42 ;$9C422=400002 MOVV R111,R16 RCAALL DDIV16 ;除以立即数数400022,得到被测测脉冲周期之之单位为毫秒秒,且含因子子100 MOVV R166,R14 MOVV R17,RR15 LDII R188,3 LDII R19,$E8 RCAALL CCONVT ;二翻十十,得千位 STSS $700,R11 ;送入显示区区 CLRR R188 LDII R199,$64 RCAALL CCONVT ;二翻十十,得百位 LDII R199,-$299 ;在百位处处加小数点(百百位实为个位位) SUBB R111,R19
45、 STSS $711,R11 ;送入显示区区 LDII R19,110 RCAALL CCONVT ;二翻十十,得十位 STSS $722,R11 STSS $733,R17 ;小数送入显显示区 RJMMP HHH43 ;转去显示新新采样数据CONVT: CLR R11COVLOP:SUB R17,RR19 SBCC R166,R18 ;减去十进制制数某位之权权 BRCCS COONVCM INCC R111 ;够减减,增权 RJMMP COOVLOPCONVCM:ADD R17,RR19 ;否则则恢复余数 ADC R16,R18 RETT1_CA433:SEI IN RR1,SREEG IN
46、 RR24,TCCCR1A SBRRS RR24,6 RJMMP OOUTLW ;当前输输出低电平,转转 IN RR24,OCCR1AL IN RR25,OCCR1AH SUBII R24,$DF ;LOW(-200011) SBCCI RR25,$BB1 ;HIGH(-200001)/$BB1DF为220,0011之补码 OUTT OCCR1AH,R25 OUTT OCCR1AL,R24 ;写入高高电平维持时时间超前值 LDII R224,$800 ;比较匹配配A达到时,OOC1A输出出为低 OUTT TCCCR1A,R24 OUTT SRREG,R11 RETTIOUTLW: IN R24
47、4,OCR11AL IN RR25,OCCR1AH SUBBI R24,$BE ;LOW(-400022) SBCCI R25,$63 ;HIGHH(-400002)/$63BE为为40,0002之补码 OUTT OCCR1AH,R25 ; OUTT OCCR1AL,R24 ;写入低低电平维持时时间超前值 LDII R224,$C00 ;比较匹配配A达到时,OOC1A输出出为高 OUTT TCCCR1A,R24 OUTT SRREG,R11 RETTIT1_CP433:IN R33,SREGG ;T/C11捕获中断 IN RR5,ICRR1L IN RR4,ICRR1H MOVV R117,R
48、211 MOVV R221,R5 SUBB R55,R17 MOVV R117,R200 MOVV R220,R4 ;与上一次采采集的频率量量相减,得到到频率值 SBCC R44,R17 ;在R4,RR5中 SETT ;建建采集频率量量标 OUTT SRREG,R33 RETTIT1_OV433:SEI SBII PORRTA,3 ;OUTPUUT THEE 61HZZ PULSS SBII PORRTA,3 SBII PORRTA,3 SBII PORRTA,3 CBII PORRTA,3 ;脉冲宽度22微秒RETI ;范例例98;MAX2322R1OUUT接MAXX483DDI/MAXX4
49、83RRO接MAXX232TT1IN;由TCNT00配合PB00以软件接收收RS-2332数据 对对485进行行监控:PBB1接DE和和/RE;AVR对4885发来数据据不接收,该该数据经MAAX483RO-MMAX2322T1INN-RSS-232远远端;数据起始位下下降沿引起中中断接收,中中断服务一开开始,将对RRS-4855的控制改为为允发禁收使使RS-;232发来数数据直接通过过RS-4885向远端发发送;当收到RS-232数据据结束符$003后,经半半位延时,对对RS-4885的控制改改为允收禁发发 使能接收收RS-;485远端发发来数据(故故要求经RSS-232发发来数据要以以$0
50、3为结结束符,对来来自RS-4485数据无无此要求);可采用avrr专门管理两两种标准转换换方案(可采采用少脚ATTtiny系系列),也可可采取主avvr兼管方案案.;主avr兼管管时,它既接接收处理完整整串行数据块块(及执行其其它程序),又控制通讯讯标准转换.EQU DATA44=$1000 .ORRG 00 ;R16:TTHE BIIT SEQQUENCEE COUNNTER RR17:WOORKINGG ;RREG.R118:FLAAG UNIITSTRT3S: RJMPP RSST3S ;BBAUD RRATE:99600 UUSE 85515/maay REPPLACE BY ATT
51、tiny seriaals .ORRG $007 ;$0077(85155) RJMMP TT0_OF .ORRG $00DRST3S: LDI R17,HIGH(ramennd) OUTT SPPH,R177 LDII R117,LOWW(rameend) OUTT SPPL,R177 LDII R117,$022 ;85355:$01 OUTT TIIMSK,RR17 ;timssk,1(允允许tcntt0中断) LDII R117,6 ;设设外部脉冲计计数 OUTT TCCCR0,RR17 CBII DDDRB,0 ;T0 为输输入 LDII R117,$FFF OUTT TCCNT0,
52、RR17 ;计1个数数即中断 SBII DDDRB,1 ;PB1输出出,控制DEE和/RE CBII POORTB,11 ;禁止4885发送 SEII CLRR R118 CLRR R116HERE0: SBRC R188,0 BRNNE RRST3S ;无错误标志志循环 SBRRS RR18,1 BRNNE HHERE0 ;未收到数据据块结束符($03)循环环 LDII R116,64 HERE1: DEC R16 BRNNE HHERE1 ;延时(488+3.5=)52微秒秒(超过半位位,以等待半半个停止位发发过去) RJMMP RRST3S ;以使远端4485正确收收到停止位 T0_OF
53、: SBI PORTTB,1 ;允允许485发发送 IN RR11,SRREG PUSSH RR17 CPII R116,0 ;接接收起始位? BRNNE TT0SV111 LDII R117,2 ;YYES OUTT TCCCR0,RR17 ;改为内定定时,8分频频(4MHZZ/8) LDII R117,2322 ;半位定时时常数24,定定出48微秒秒(CC RORR R118 ;组组织数据 SBII POORTC,00 ;SCLKK升高,为下下位读准备 DECC R116 BRNNE RRD1 ;8位数据都都写完?RET ;范例例100 ; DS188B20为美美国DALLLAS公司(已被
54、MAXXIM公司并并购)生产的的单线数字温温度传感器,;可将温度信号号直接转换成成数字信号供供单片机处理理,所测温度度范围-555C1255C,精度;达0.5CC,转换时间间为750毫毫秒。该器件件出厂时带有有固化的8字字节身份编号,最低低;位字节为家族族号码$288,接下来66字节为器件件流水线编号号,最高位字字节为CRCC校验码。;有读ROM,匹匹配ROM,启启动温度变换换,读RAMM数据等十余余种命令对118B20操操作。使用;18B20之之前要用读RROM命令读读出其身份编编号并记录。一一条单总线上上可挂接任意意多个;18B20,单单片机通过单单总线发出启启动转换命令令之后,所有有18
55、B200同时进行温温度转换。;经等待延时后后,单片机通通过发出匹配配ROM命令令,18B220编号,读读RAM数据据等命令等,;读取各18BB20温度数数据组(每组组数据共9字字节)。程序序中对每组数数据都进行CCRC校验。;温度数据占22字节,为补补码形式。最最高位为符号号位,0为正正1为负。高高位字节和低低位;字节的高4位位为温度整数数部分,最低低4位为温度度小数部分。程程序中对温度度数据进行取取;补、左移将整整数部和小数数部分分离,再再将它们分别别转成十进制制数。整数二二翻十用减;十进一法,小小数二翻十采采用按权累加加法(并以减减负替代加正正),再将它它们冠以数符符;并加小数点送送入DS
56、PAA子程序的显显示缓存区,调调该子程序进进行显示。; 由于DDSPA子程程序中含0.462秒定定时复位看门门狗指令,故故以调用DSSPA为主循循环程序;不必考虑对看看门狗管理问问题(初始化化设置看门狗狗溢出周期为为0.49秒秒)。; DS118B20不不象一般串行行器件既有数数据线又有时时钟线,它只只有一条数据据线,故它;只能靠较严格格的时序脉冲冲信号进行读读写,程序中中多种延时环环节就是为调调整时序所;设。本程序AAVR使用44MHZ时钟钟,如改变时时钟,应按定定时时间重新新确定延时常常数。; 18B200的使用可采采用窃电方式式,此种方式式要将18BB20电源端端接地。在线线缆长测点;的
57、应用场合,可可控制MOSS管取得数据据线的强上拉拉,以提高总总线驱动能力力。;对18B200的ROM操操作命令如下下:; 命命令 代码; 读读ROM $333; 匹配RROM $55; 跳跳过ROM $CCC; 搜搜索ROM $F00; 告告警搜索 $EC; 对18B220的存储器器操作命令如如下:; 命命令 代代码; 写暂时时存储器 $4E; 读暂时时存储器 $BE; 复制暂暂时存储器 $448; 启动温温度变换 $44; EEPPROM内容容调出 $BB8; 读读电源 $B44 ; 有关18BB20初始化化,读写命令令,读写时序序等请参看参参考文献9和和10,188B20与AAVR接口;见
58、程序附图,CRC检测测请参看4.8.4小节节。START2:LDI R166,2 OUTT SSPH,R116 LDII RR16,$55FH OUT SPPL,R166 ;堆栈指针针初始化 SBI DDDRA,2 CBI POORTA,22 ;MOS管管不上拉 RCAALL RESEET ;复复位18B220 WDRR LDII RR16,$00D OUTT WWDTCR,R16 ;启动看看门狗,溢出出时间为0.49秒 CLRR RR2 ;执行请除除看门狗指令令WDR的定定时器初始化化请除 LDII RR16,$CCC ;跳越RROM(SKKIP ROOM) RCAALL WB LDII R
59、R16,$444 ;STAART DSS18B200 TEMPPORATUURE COONVERTTING RCAALL WB CLRR XXH CLRR YYH ;指针高位位字节清除 LDII YYL,$6CCCLR44:SST Y+,YHH CPII YYL,$744 BRNNE CLR444 ;清除除显示缓存区区($6C$74) LDII RR17,1663 ;4.66181663=7533(ms)STR0: RRCALL DSPA DECC RR17 BRNNE STR0 ;总共延延时753mms,等待转转换完成 RCAALL RESEET ;再再次复位DSS18B200 LDII X
60、XL,$600 ;温度数据据指针 LDII RR17,4 ;总共44只DS188B20 LDII ZHH,HIGHH(DATAA*2) LDII ZZL,LOWW(DATAA*2);118B20身身份数据指针针LOOP0:LLDI R16,$55 ;匹匹配ROM命命令 (maatch rrom) RCAALL WB ;写入入18B200 LDII RR18,8 ;18BB20身份数数据共8个字字节固化在FFLASH中中LOOP4:LLPM ;取数据 MOVV RR16,R00 ;转入R116 RCAALL WB ;写入入18B200 1字节 ADIIW ZL,1 ;指向下下一字节 DECC R
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论