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

📄 测转速.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
          .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 + -