📄 frequence.lst
字号:
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 + -