📄 测频.lst
字号:
.equ PIND7 =7
.equ PIND6 =6
.equ PIND5 =5
.equ PIND4 =4
.equ PIND3 =3
.equ PIND2 =2
.equ PIND1 =1
.equ PIND0 =0
.equ SPIE =7
.equ SPE =6
.equ DORD =5
.equ MSTR =4
.equ CPOL =3
.equ CPHA =2
.equ SPR1 =1
.equ SPR0 =0
.equ SPIF =7
.equ WCOL =6
.equ RXC =7
.equ TXC =6
.equ UDRE =5
.equ FE =4
.equ OR =3
.equ RXCIE =7
.equ TXCIE =6
.equ UDRIE =5
.equ RXEN =4
.equ TXEN =3
.equ CHR9 =2
.equ RXB8 =1
.equ TXB8 =0
.equ ACD =7
.equ ACO =5
.equ ACI =4
.equ ACIE =3
.equ ACIC =2
.equ ACIS1 =1
.equ ACIS0 =0
.equ MUX2 =2
.equ MUX1 =1
.equ MUX0 =0
.equ ADEN =7
.equ ADSC =6
.equ ADFR =5
.equ ADIF =4
.equ ADIE =3
.equ ADPS2 =2
.equ ADPS1 =1
.equ ADPS0 =0
.def XL =r26
.def XH =r27
.def YL =r28
.def YH =r29
.def ZL =r30
.def ZH =r31
.equ RAMEND =$25F ;Last On-Chip SRAM location
.equ XRAMEND =$25F
.equ E2END =$1FF
.equ FLASHEND=$FFF
.equ INT0addr=$001 ;External Interrupt0 Vector Address
.equ INT1addr=$002 ;External Interrupt1 Vector Address
.equ OC2addr =$003 ;Timer2 compare match Vector Address
.equ OVF2addr=$004 ;Timer2 overflow Vector Address
.equ ICP1addr=$005 ;Timer1 Input Capture Vector Address
.equ OC1Aaddr=$006 ;Timer1 Output Compare A Interrupt Vector Address
.equ OC1Baddr=$007 ;Timer1 Output Compare B Interrupt Vector Address
.equ OVF1addr=$008 ;Overflow1 Interrupt Vector Address
.equ OVF0addr=$009 ;Overflow0 Interrupt Vector Address
.equ SPIaddr =$00A ;SPI Interrupt Vector Address
.equ URXCaddr=$00B ;UART Receive Complete Interrupt Vector Address
.equ UDREaddr=$00C ;UART Data Register Empty Interrupt Vector Address
.equ UTXCaddr=$00D ;UART Transmit Complete Interrupt Vector Address
.equ ADCCaddr=$00E ;ADC Conversion Complete Interrupt Vector Address
.equ ERDYaddr=$00F ;EEPROM Write Complete Interrupt Vector Address
.equ ACIaddr =$010 ;Analog Comparator Interrupt Vector Address000000 c027 rjmp reset
.def temp = r16 ;暂存器
.def cnt1d = r17
.def cnt2d = r18 ;cnt1、dcnt2d和cnt3d存放结果的十进制
.def cnt3d = r19
.def count = r20
.def cnt = r21
.def res1 = r22
.def res2 = r23 ;res1、res2和res3存放结果的十六进制
.def res3 = r24
.def dt = r25
.def ovfl = r26
.def aa = r27
.org 0x003 ;icp触发中断向量
000003 c004 rjmp captr
.org 0x007 ;timer0触发中断向量
000007 c018 rjmp interru
captr: ;icp触发中断子程序
000008 f04e brts b
000009 9563 inc res1
00000a e005 ldi temp, 0b00000101
00000b bf03 out tccr0, temp ;开timer0
00000c e00a ldi temp, 0b00001010
00000d bf09 out timsk, temp ;致timer0中断和捕捉中断
00000e ec00 ldi temp, 0b11000000
00000f bd0e out tccr1b,temp
000010 9468 set
000011 9518 reti
b:
000012 9468 set
000013 9563 inc res1 ;开始计数
000014 f431 brne c
000015 9573 inc res2
000016 f421 brne c
000017 9583 inc res3
000018 138a cpse res3, ovfl ;溢出处理
000019 c001 rjmp c
00001a c00b rjmp over1
c:
00001b e00a ldi temp, 0b00001010
00001c bf09 out timsk, temp
00001d ec00 ldi temp, 0b11000000
00001e bd0e out tccr1b,temp
00001f 9518 reti
interru: ;timer0溢出中断子程序
000020 955a dec cnt
000021 f019 breq over
000022 e00a ldi temp, 0b00001010
000023 bf09 out timsk, temp
000024 9518 reti
over:
000025 d047 rcall htd3
over1:
000026 d03a rcall sys
000027 9518 reti
reset:
000028 e50f ldi temp, low(ramend)
000029 bf0d out spl, temp
00002a e002 ldi temp, high(ramend) ;设置堆栈
00002b bf0e out spl+1, temp
00002c ef0f ldi temp, $ff ;初始化数码管状态
00002d bb07 out ddrb, temp ;B口:数码管数据输出
00002e bb01 out ddrd, temp ;D口:pd0-pd5为数码管片选
00002f e000 ldi temp, $00
000030 bb08 out portb, temp ;共阴极,数码管全灭
000031 bb02 out portd, temp
000032 e010 ldi cnt1d, 00
000033 e020 ldi cnt2d, 00
000034 e030 ldi cnt3d, 00
000035 9478 sei
000036 d02a rcall sys
loop: ;在数码管显出十进制数
000037 2fb1 mov aa, cnt1d
000038 70bf andi aa, $0f ;显示个位
000039 d043 rcall a
00003a 9890 cbi portd, 00
00003b 0000 nop
00003c 9a90 sbi portd, 00
00003d 2fb1 mov aa, cnt1d
00003e 7fb0 andi aa, $f0 ;显示十位
00003f 95b2 swap aa
000040 d03c rcall a
000041 9891 cbi portd, 01
000042 0000 nop
000043 9a91 sbi portd, 01
000044 2fb2 mov aa, cnt2d
000045 70bf andi aa, $0f ;显示百位
000046 d036 rcall a
000047 9892 cbi portd, 02
000048 0000 nop
000049 9a92 sbi portd, 02
00004a 2fb2 mov aa, cnt2d
00004b 7fb0 andi aa, $f0 ;显示千位
00004c 95b2 swap aa
00004d d02f rcall a
00004e 9893 cbi portd, 03
00004f 0000 nop
000050 9a93 sbi portd, 03
000051 2fb3 mov aa, cnt3d
000052 70bf andi aa, $0f ;显示万位
000053 d029 rcall a
000054 9894 cbi portd, 04
000055 0000 nop
000056 9a94 sbi portd, 04
000057 2fb3 mov aa, cnt3d
000058 7fb0 andi aa, $f0 ;显示十万位
000059 95b2 swap aa
00005a d022 rcall a
00005b 9895 cbi portd, 05
00005c 0000 nop
00005d 9a95 sbi portd, 05
00005e fd90 sbrc dt, 0
00005f 9508 ret
000060 cfd6 rjmp loop
sys: ;初始化
000061 9488 clc
000062 94e8 clt
000063 e090 ldi dt, 00
000064 e0af ldi ovfl, $0f
000065 e15f ldi cnt, 31
000066 e70b ldi temp, 123
000067 bf02 out tcnt0, temp
000068 e008 ldi temp, 0b00001000
000069 bf09 out timsk, temp
00006a ec00 ldi temp, 0b11000000
00006b bd0e out tccr1b,temp
00006c 9508 ret
htd3: ;16转10子程序
00006d 6091 sbr dt, 1
00006e e148 ldi count, 24
00006f 2711 clr cnt1d
000070 2722 clr cnt2d
000071 2733 clr cnt3d
loopd:
000072 1f66 rol res1
000073 1f77 rol res2
000074 1f88 rol res3
000075 1f11 rol cnt1d
000076 1f22 rol cnt2d
000077 1f33 rol cnt3d
000078 954a dec count
000079 f409 brne d
00007a cfbc rjmp loop
d:
00007b d007 rcall adjn
00007c cff5 rjmp loopd
a:
00007d e0f4 ldi zh, high(zk*2)
00007e e0e0 ldi zl, low(zk*2)
00007f 0feb add zl, aa
000080 95c8 lpm
000081 ba08 out portb, r0
000082 9508 ret
adjn:
000083 934f push count
000084 2f41 mov count, cnt1d
000085 d009 rcall adjd1
000086 2f14 mov cnt1d, count
000087 2f42 mov count, cnt2d
000088 d006 rcall adjd1
000089 2f24 mov cnt2d, count
00008a 2f43 mov count, cnt3d
00008b d003 rcall adjd1
00008c 2f34 mov cnt3d, count
00008d 914f pop count
00008e 9508 ret
adjd1:
00008f e003 ldi temp, 3
000090 0f04 add temp, count
000091 fd03 sbrc temp, 3
000092 2f40 mov count, temp
000093 e300 ldi temp, $30
000094 0f04 add temp, count
000095 fd07 sbrc temp, 7
000096 2f40 mov count, temp
000097 9508 ret
.equ zk=0x0200
.org zk ;字形表
.db 0x03f,0x006,0x05b,0x04f
000200 063f
000201 4f5b
.db 0x066,0x06d,0x07d,0x007
000202 6d66
000203 077d
.db 0x07f,0x06f,0x077,0x07c
000204 6f7f
000205 7c77
.db 0x039,0x05e,0x071,0x0ff
000206 5e39
000207 ff71
Assembly complete with no errors.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -