⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frequence.lst

📁 使用Mega16编制的频率检测程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    0117 2E26      MOV	R2,R22
    0118 2433      CLR	R3
    0119 5061      SUBI	R22,1
    011A 2022      TST	R2
    011B F7D9      BNE	0x0117
(0170)         }
(0171)         Cmd<<=1;
    011C 0CCC      LSL	R12
    011D 9543      INC	R20
    011E 3048      CPI	R20,0x8
    011F F248      BCS	0x00E9
(0172)     }//发送命令
(0173)     for(i=0;i<8;i++)
    0120 2744      CLR	R20
    0121 C035      RJMP	0x0157
(0174)     {//发送参数
(0175)         if(0x80&Data)
    0122 FEA7      SBRS	R10,7
    0123 C019      RJMP	0x013D
(0176)         {
(0177)             SetB(DIO);
    0124 E002      LDI	R16,2
    0125 DF26      RCALL	_SetB
(0178)             j=Delay;
    0126 E062      LDI	R22,2
(0179)             while(j--);
    0127 2E26      MOV	R2,R22
    0128 2433      CLR	R3
    0129 5061      SUBI	R22,1
    012A 2022      TST	R2
    012B F7D9      BNE	0x0127
(0180)             
(0181)             SetB(CLK);
    012C E001      LDI	R16,1
    012D DF1E      RCALL	_SetB
(0182)             j=Delay;
    012E E062      LDI	R22,2
(0183)             while(j--);
    012F 2E26      MOV	R2,R22
    0130 2433      CLR	R3
    0131 5061      SUBI	R22,1
    0132 2022      TST	R2
    0133 F7D9      BNE	0x012F
(0184)             
(0185)             ClrB(CLK);
    0134 E001      LDI	R16,1
    0135 DF23      RCALL	_ClrB
(0186)             j=Delay;
    0136 E062      LDI	R22,2
(0187)             while(j--);
    0137 2E26      MOV	R2,R22
    0138 2433      CLR	R3
    0139 5061      SUBI	R22,1
    013A 2022      TST	R2
    013B F7D9      BNE	0x0137
(0188)         }
    013C C018      RJMP	0x0155
(0189)         else
(0190)         {
(0191)             ClrB(DIO);
    013D E002      LDI	R16,2
    013E DF1A      RCALL	_ClrB
(0192)             j=Delay;
    013F E062      LDI	R22,2
(0193)             while(j--);
    0140 2E26      MOV	R2,R22
    0141 2433      CLR	R3
    0142 5061      SUBI	R22,1
    0143 2022      TST	R2
    0144 F7D9      BNE	0x0140
(0194)             
(0195)             SetB(CLK);
    0145 E001      LDI	R16,1
    0146 DF05      RCALL	_SetB
(0196)             j=Delay;
    0147 E062      LDI	R22,2
(0197)             while(j--);
    0148 2E26      MOV	R2,R22
    0149 2433      CLR	R3
    014A 5061      SUBI	R22,1
    014B 2022      TST	R2
    014C F7D9      BNE	0x0148
(0198)             
(0199)             ClrB(CLK);
    014D E001      LDI	R16,1
    014E DF0A      RCALL	_ClrB
(0200)             j=Delay;
    014F E062      LDI	R22,2
(0201)             while(j--);        
    0150 2E26      MOV	R2,R22
    0151 2433      CLR	R3
    0152 5061      SUBI	R22,1
    0153 2022      TST	R2
    0154 F7D9      BNE	0x0150
(0202)         }
(0203)         Data<<=1;
    0155 0CAA      LSL	R10
    0156 9543      INC	R20
    0157 3048      CPI	R20,0x8
    0158 F248      BCS	0x0122
(0204)     }//发送参数
(0205)     SetB(CS);    
    0159 2700      CLR	R16
    015A DEF1      RCALL	_SetB
    015B 940E01DC  CALL	pop_gset4
    015D 9508      RET
_DispChar:
  num                  --> R22
  Addr                 --> R20
    015E 940E01E5  CALL	push_gset2
    0160 2F62      MOV	R22,R18
    0161 2F40      MOV	R20,R16
(0206) }
(0207) 
(0208) void DispChar(unsigned char Addr,unsigned char num)
(0209) {//地址Addr为数码管某一位,数值0-7
(0210) //用于在指定位置显示数据,当num为0~9时,显示同数字
(0211) //当num为10~15时,显示A~F,当num为16~21时,显示 - E H L P (空)
(0212) //当num为50~59时,显示0.~9.,当num为60~65时,显示A.~F.
(0213)     if(num>=0&&num<16)//显示16进制数
    0162 3060      CPI	R22,0
    0163 F030      BCS	0x016A
    0164 3160      CPI	R22,0x10
    0165 F420      BCC	0x016A
(0214)     {
(0215)         WriteTwo7289(DispMethod1+Addr,num);
    0166 2F26      MOV	R18,R22
    0167 2F04      MOV	R16,R20
    0168 5308      SUBI	R16,0x38
    0169 DF5C      RCALL	_WriteTwo7289
(0216)     }
(0217)     if(num>=50&&num<66)//显示带小数点的16进制数
    016A 3362      CPI	R22,0x32
    016B F038      BCS	0x0173
    016C 3462      CPI	R22,0x42
    016D F428      BCC	0x0173
(0218)     {
(0219)         WriteTwo7289(DispMethod1+Addr,0x80+num);
    016E 2F26      MOV	R18,R22
    016F 5820      SUBI	R18,0x80
    0170 2F04      MOV	R16,R20
    0171 5308      SUBI	R16,0x38
    0172 DF53      RCALL	_WriteTwo7289
(0220)     }
(0221)     if(num>=16&&num<22)//显示特殊符号
    0173 3160      CPI	R22,0x10
    0174 F038      BCS	0x017C
    0175 3166      CPI	R22,0x16
    0176 F428      BCC	0x017C
(0222)     {
(0223)         WriteTwo7289(DispMethod0+Addr,num-6);
    0177 2F26      MOV	R18,R22
    0178 5026      SUBI	R18,6
    0179 2F04      MOV	R16,R20
    017A 5800      SUBI	R16,0x80
    017B DF4A      RCALL	_WriteTwo7289
(0224)     }
    017C 940E01D6  CALL	pop_gset2
    017E 9508      RET
(0225) }
(0226) 
(0227) //TIMER0 initialize - prescale:Falling edge
(0228) //用于记录外部引脚的变化
(0229) void timer0_init(void)
(0230) {
(0231)     TCCR0 = 0x00; //stop
_timer0_init:
    017F 2422      CLR	R2
    0180 BE23      OUT	0x33,R2
(0232)     TCNT0 = 0x00 /*INVALID SETTING*/; //set count
    0181 BE22      OUT	0x32,R2
(0233)     TCCR0 = 0x06; //启动计数器,记录低脉冲个数
    0182 E086      LDI	R24,6
    0183 BF83      OUT	0x33,R24
    0184 9508      RET
(0234) }
(0235) 
(0236) //TIMER1 initialize - prescale:1
(0237) // WGM: 0) Normal, TOP=0xFFFF
(0238) // desired value: 1000Hz
(0239) //用于产生1KHz的中断
(0240) void timer1_init(void)
(0241) {
(0242)     TCCR1B = 0x00; //计时停止
_timer1_init:
    0185 2422      CLR	R2
    0186 BC2E      OUT	0x2E,R2
(0243)     TCNT1H = 0xFC; //设置计数次数64536
    0187 EF8C      LDI	R24,0xFC
    0188 BD8D      OUT	0x2D,R24
(0244)     TCNT1L = 0x18;
    0189 E188      LDI	R24,0x18
    018A BD8C      OUT	0x2C,R24
(0245) 
(0246)     TCCR1A = 0x00;
    018B BC2F      OUT	0x2F,R2
(0247)     TCCR1B = 0x01; //启动定时器
    018C E081      LDI	R24,1
    018D BD8E      OUT	0x2E,R24
    018E 9508      RET
_timer1_ovf_isr:
    018F 940E01FE  CALL	push_lset
(0248) }
(0249) 
(0250) #pragma interrupt_handler timer1_ovf_isr:9
(0251) void timer1_ovf_isr(void)
(0252) {
(0253)     //TIMER1 has overflowed
(0254)     TCNT1H = 0xFC; //reload counter high value
    0191 EF8C      LDI	R24,0xFC
    0192 BD8D      OUT	0x2D,R24
(0255)     TCNT1L = 0x18; //reload counter low value
    0193 E188      LDI	R24,0x18
    0194 BD8C      OUT	0x2C,R24
(0256)     
(0257)     TCCR0=0x00;
    0195 2422      CLR	R2
    0196 BE23      OUT	0x33,R2
(0258)     frequence=TCNT0;//读入脉冲个数
    0197 B622      IN	R2,0x32
    0198 92200060  STS	frequence,R2
(0259)     TCNT0=0;
    019A 2422      CLR	R2
    019B BE22      OUT	0x32,R2
(0260)     TCCR0=0x06;//启动计数器,低电平记录
    019C E086      LDI	R24,6
    019D BF83      OUT	0x33,R24
(0261)     
(0262)     DispChar(1,frequence/10);
    019E E01A      LDI	R17,0xA
    019F 91000060  LDS	R16,frequence
    01A1 940E01C0  CALL	div8u
    01A3 2F20      MOV	R18,R16
    01A4 E001      LDI	R16,1
    01A5 DFB8      RCALL	_DispChar
(0263)     DispChar(0,frequence%10);   
    01A6 E01A      LDI	R17,0xA
    01A7 91000060  LDS	R16,frequence
    01A9 940E01BE  CALL	mod8u
    01AB 2F20      MOV	R18,R16
    01AC 2700      CLR	R16
    01AD DFB0      RCALL	_DispChar
    01AE 940E0215  CALL	pop_lset
    01B0 9518      RETI
(0264) }
(0265) 
(0266) //初始化所有设备
(0267) void init_devices(void)
(0268) {
(0269)  //stop errant interrupts until set up
(0270)     CLI(); //disable all interrupts
_init_devices:
    01B1 94F8      BCLR	7
(0271)     timer0_init();
    01B2 DFCC      RCALL	_timer0_init
(0272)     timer1_init();
    01B3 DFD1      RCALL	_timer1_init
(0273) 
(0274)     MCUCR = 0x00;
    01B4 2422      CLR	R2
    01B5 BE25      OUT	0x35,R2
(0275)     GICR  = 0x00;
    01B6 BE2B      OUT	0x3B,R2
(0276)     TIMSK = 0x04; //timer interrupt sources TOIE1 T/C1的溢出中断程序
    01B7 E084      LDI	R24,4
    01B8 BF89      OUT	0x39,R24
(0277)     SEI(); //re-enable interrupts
    01B9 9478      BSET	7
    01BA 9508      RET
(0278)  //all peripherals are now initialized
(0279) }
(0280) 
(0281) //
(0282) void main(void)
(0283) {
(0284)     init_devices();
_main:
    01BB DFF5      RCALL	_init_devices
(0285)     while(1);
FILE: <library>
    01BC CFFF      RJMP	0x01BC
    01BD 9508      RET
mod8u:
    01BE 9468      BSET	6
    01BF C001      RJMP	xdiv8u
div8u:
    01C0 94E8      BCLR	6
xdiv8u:
    01C1 932A      ST	R18,-Y
    01C2 92FA      ST	R15,-Y
    01C3 92EA      ST	R14,-Y
    01C4 24FF      CLR	R15
    01C5 24EE      CLR	R14
    01C6 E120      LDI	R18,0x10
    01C7 0F00      LSL	R16
    01C8 1CFF      ROL	R15
    01C9 1CEE      ROL	R14
    01CA 16E1      CP	R14,R17
    01CB F010      BCS	0x01CE
    01CC 1AE1      SUB	R14,R17
    01CD 9503      INC	R16
    01CE 952A      DEC	R18
    01CF F7B9      BNE	0x01C7
    01D0 F40E      BRTC	0x01D2
    01D1 2D0E      MOV	R16,R14
    01D2 90E9      LD	R14,Y+
    01D3 90F9      LD	R15,Y+
    01D4 9129      LD	R18,Y+
    01D5 9508      RET
pop_gset2:
    01D6 E0E2      LDI	R30,2
    01D7 940C01EB  JMP	pop
pop_gset3:
    01D9 E0E4      LDI	R30,4
    01DA 940C01EB  JMP	pop
pop_gset4:
    01DC E0E8      LDI	R30,0x8
    01DD 940C01EB  JMP	pop
push_gset5:
    01DF 92FA      ST	R15,-Y
    01E0 92EA      ST	R14,-Y
push_gset4:
    01E1 92DA      ST	R13,-Y
    01E2 92CA      ST	R12,-Y
push_gset3:
    01E3 92BA      ST	R11,-Y
    01E4 92AA      ST	R10,-Y
push_gset2:
    01E5 937A      ST	R23,-Y
    01E6 936A      ST	R22,-Y
push_gset1:
    01E7 935A      ST	R21,-Y
    01E8 934A      ST	R20,-Y
    01E9 9508      RET
pop_gset1:
    01EA E0E1      LDI	R30,1
pop:
    01EB 9149      LD	R20,Y+
    01EC 9159      LD	R21,Y+
    01ED FDE0      SBRC	R30,0
    01EE 9508      RET
    01EF 9169      LD	R22,Y+
    01F0 9179      LD	R23,Y+
    01F1 FDE1      SBRC	R30,1
    01F2 9508      RET
    01F3 90A9      LD	R10,Y+
    01F4 90B9      LD	R11,Y+
    01F5 FDE2      SBRC	R30,2
    01F6 9508      RET
    01F7 90C9      LD	R12,Y+
    01F8 90D9      LD	R13,Y+
    01F9 FDE3      SBRC	R30,3
    01FA 9508      RET
    01FB 90E9      LD	R14,Y+
    01FC 90F9      LD	R15,Y+
    01FD 9508      RET
push_lset:
    01FE 93FA      ST	R31,-Y
    01FF 93EA      ST	R30,-Y
    0200 93BA      ST	R27,-Y
    0201 93AA      ST	R26,-Y
    0202 939A      ST	R25,-Y
    0203 938A      ST	R24,-Y
    0204 933A      ST	R19,-Y
    0205 932A      ST	R18,-Y
    0206 931A      ST	R17,-Y
    0207 930A      ST	R16,-Y
    0208 929A      ST	R9,-Y
    0209 928A      ST	R8,-Y
    020A 927A      ST	R7,-Y
    020B 926A      ST	R6,-Y
    020C 925A      ST	R5,-Y
    020D 924A      ST	R4,-Y
    020E 923A      ST	R3,-Y
    020F 922A      ST	R2,-Y
    0210 921A      ST	R1,-Y
    0211 920A      ST	R0,-Y
    0212 B60F      IN	R0,0x3F
    0213 920A      ST	R0,-Y
    0214 9508      RET
pop_lset:
    0215 9009      LD	R0,Y+
    0216 BE0F      OUT	0x3F,R0
    0217 9009      LD	R0,Y+
    0218 9019      LD	R1,Y+
    0219 9029      LD	R2,Y+
    021A 9039      LD	R3,Y+
    021B 9049      LD	R4,Y+
    021C 9059      LD	R5,Y+
    021D 9069      LD	R6,Y+
    021E 9079      LD	R7,Y+
    021F 9089      LD	R8,Y+
    0220 9099      LD	R9,Y+
    0221 9109      LD	R16,Y+
    0222 9119      LD	R17,Y+
    0223 9129      LD	R18,Y+
    0224 9139      LD	R19,Y+
    0225 9189      LD	R24,Y+
    0226 9199      LD	R25,Y+
    0227 91A9      LD	R26,Y+
    0228 91B9      LD	R27,Y+
    0229 91E9      LD	R30,Y+
    022A 91F9      LD	R31,Y+
    022B 9508      RET
lsl8:
    022C 2311      TST	R17
    022D F019      BEQ	0x0231
    022E 0F00      LSL	R16
    022F 951A      DEC	R17
    0230 CFFB      RJMP	lsl8
    0231 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -