📄 测转速.lst
字号:
.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 c02f rjmp reset
.def temp = r16 ;暂存器
.def aa = r17
.def cnt = r18
.def mc16l = r19 ;mc16l和mc16h存放脉冲个数
.def mc16h = r20
.def mp8u = r21 ;mp8u=30,因为是每2秒采样
.def res1 = r21 ;res1、res2和res3存放结果的十六进制
.def res2 = r22
.def res3 = r23
.def count = r24
.def cnt1d = r25 ;cnt1、dcnt2d和cnt3d存放结果的十进制
.def cnt2d = r26
.def cnt3d = r27
.def dt = r28
.def dt1 = r29
.org 0x003 ;icp触发中断向量
icpt1:
000003 c00c rjmp captr
.org 0x008
000008 c01e rjmp interru
.cseg
.org 0x010
captr: ;icp触发中断子程序
000010 f046 brts down
000011 e005 ldi temp, 0b00000101
000012 bf03 out tccr0, temp ;开timer0
000013 e00a ldi temp, 0b00001010
000014 bf09 out timsk, temp ;致timer0中断和捕捉中断
000015 e800 ldi temp, 0b10000000
000016 bd0e out tccr1b,temp
000017 9468 set
000018 9518 reti
down: ;下降沿开始计数
000019 9468 set
00001a 9533 inc mc16l
00001b f431 brne b
00001c 9543 inc mc16h
00001d 134d cpse mc16h, dt1 ;溢出处理
00001e c003 rjmp b
00001f e040 ldi mc16h, 00
000020 e030 ldi mc16l, 00
000021 c00a rjmp over
b:
000022 e00a ldi temp, 0b00001010 ;致timer0中断和捕捉中断
000023 bf09 out timsk, temp
000024 e800 ldi temp, 0b10000000
000025 bd0e out tccr1b,temp
000026 9518 reti
interru: ;timer0溢出中断子程序
000027 952a dec cnt
000028 f019 breq over
000029 e00a ldi temp, 0b00001010
00002a bf09 out timsk, temp
00002b 9518 reti
over:
00002c d079 rcall conver ;conver:计算结果子程序
00002d d04d rcall htd3 ;htd3:
00002e d03a rcall sys
00002f 9518 reti
reset:
000030 e50f ldi temp, low(ramend)
000031 bf0d out spl, temp
000032 e002 ldi temp, high(ramend) ;设置堆栈
000033 bf0e out spl+1, temp
000034 ef0f ldi temp, $ff ;初始化数码管状态
000035 bb07 out ddrb, temp ;B口:数码管数据输出
000036 bb01 out ddrd, temp ;D口:pd0-pd5为数码管片选
000037 e000 ldi temp, $00
000038 bb08 out portb, temp ;共阴极,数码管全灭
000039 bb02 out portd, temp
00003a e090 ldi cnt1d, 00
00003b e0a0 ldi cnt2d, 00
00003c e0b0 ldi cnt3d, 00
00003d 9478 sei
00003e d02a rcall sys
loop: ;在数码管显出十进制数
00003f 2f19 mov aa, cnt1d
000040 701f andi aa, $0f ;显示个位
000041 d049 rcall a
000042 9890 cbi portd, 00
000043 0000 nop
000044 9a90 sbi portd, 00
000045 2f19 mov aa, cnt1d
000046 7f10 andi aa, $f0 ;显示十位
000047 9512 swap aa
000048 d042 rcall a
000049 9891 cbi portd, 01
00004a 0000 nop
00004b 9a91 sbi portd, 01
00004c 2f1a mov aa, cnt2d
00004d 701f andi aa, $0f ;显示百位
00004e d03c rcall a
00004f 9892 cbi portd, 02
000050 0000 nop
000051 9a92 sbi portd, 02
000052 2f1a mov aa, cnt2d
000053 7f10 andi aa, $f0 ;显示千位
000054 9512 swap aa
000055 d035 rcall a
000056 9893 cbi portd, 03
000057 0000 nop
000058 9a93 sbi portd, 03
000059 2f1b mov aa, cnt3d
00005a 701f andi aa, $0f ;显示万位
00005b d02f rcall a
00005c 9894 cbi portd, 04
00005d 0000 nop
00005e 9a94 sbi portd, 04
00005f 2f1b mov aa, cnt3d
000060 7f10 andi aa, $f0 ;显示十万位
000061 9512 swap aa
000062 d028 rcall a
000063 9895 cbi portd, 05
000064 0000 nop
000065 9a95 sbi portd, 05
000066 fdc0 sbrc dt, 0
000067 9508 ret
000068 cfd6 rjmp loop
sys: ;初始化
000069 9488 clc
00006a 94e8 clt
00006b e8d1 ldi dt1, $81
00006c e0c0 ldi dt, 00
00006d e030 ldi mc16l, 00
00006e e040 ldi mc16h, 00
00006f e32e ldi cnt, 62
000070 e15e ldi mp8u, 30
000071 ef07 ldi temp, 247
000072 bf02 out tcnt0, temp
000073 e000 ldi temp, 00
000074 bd0f out tccr1a,temp
000075 bf03 out tccr0, temp
000076 e00a ldi temp, 0b00001010
000077 bf09 out timsk, temp
000078 ec00 ldi temp, 0b11000000
000079 bd0e out tccr1b,temp
00007a 9508 ret
htd3: ;16转10子程序
00007b 60c1 sbr dt, 1
00007c e188 ldi count, 24
00007d 2799 clr cnt1d
00007e 27aa clr cnt2d
00007f 27bb clr cnt3d
loopd:
000080 1f55 rol res1
000081 1f66 rol res2
000082 1f77 rol res3
000083 1f99 rol cnt1d
000084 1faa rol cnt2d
000085 1fbb rol cnt3d
000086 958a dec count
000087 f409 brne c
000088 cfb6 rjmp loop
c:
000089 d007 rcall adjn
00008a cff5 rjmp loopd
a:
00008b e0f4 ldi zh, high(zk*2)
00008c e0e0 ldi zl, low(zk*2)
00008d 0fe1 add zl, aa
00008e 95c8 lpm
00008f ba08 out portb, r0
000090 9508 ret
adjn:
000091 938f push count
000092 2f89 mov count, cnt1d
000093 d009 rcall adjd1
000094 2f98 mov cnt1d, count
000095 2f8a mov count, cnt2d
000096 d006 rcall adjd1
000097 2fa8 mov cnt2d, count
000098 2f8b mov count, cnt3d
000099 d003 rcall adjd1
00009a 2fb8 mov cnt3d, count
00009b 918f pop count
00009c 9508 ret
adjd1:
00009d e003 ldi temp, 3
00009e 0f08 add temp, count
00009f fd03 sbrc temp, 3
0000a0 2f80 mov count, temp
0000a1 e300 ldi temp, $30
0000a2 0f08 add temp, count
0000a3 fd07 sbrc temp, 7
0000a4 2f80 mov count, temp
0000a5 9508 ret
conver: ;计算结果子程序
0000a6 2777 clr res3
0000a7 2766 clr res2
0000a8 e028 ldi cnt, 8
0000a9 9556 lsr mp8u
m16_1:
0000aa f410 brcc m16_2
0000ab 0f63 add res2, mc16l
0000ac 1f74 adc res3, mc16h
m16_2:
0000ad 9577 ror res3
0000ae 9567 ror res2
0000af 9557 ror res1
0000b0 952a dec cnt
0000b1 f7c1 brne m16_1
0000b2 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
000206 5e39
000207 0071
Assembly complete with no errors.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -