📄 cymometer.lst
字号:
.module cymometer.c
.area vector(rom, abs)
.org 14
0007 C0CB rjmp _timer0
.org 6
0003 C10C rjmp _timer1
.area code(ram, con, rel)
.area lit(rom, con, rel)
000D _tabel::
000D 063F .byte 63,6
000E 4F5B .byte 91,'O
000F 6D66 .byte 'f,'m
0010 077D .byte 125,7
0011 6F7F .byte 127,'o
0012 7C77 .byte 'w,124
0013 5E39 .byte 57,94
0014 7179 .byte 'y,'q
0015 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
0015 .dbsym s tabel _tabel Ac[16:16]
.area data(ram, con, rel)
--- 0000 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
0030 _ledbuff::
0030 .blkb 2
.area idata
--- 0000 3F3F .byte 63,63
.area data(ram, con, rel)
--- 0001 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
--- 0001 .blkb 2
.area idata
--- 0001 3F3F .byte 63,63
.area data(ram, con, rel)
--- 0002 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
--- 0002 .blkb 2
.area idata
--- 0002 3F3F .byte 63,63
.area data(ram, con, rel)
--- 0003 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
--- 0003 .dbsym s ledbuff _ledbuff Ac[6:6]
.area text(rom, con, rel)
--- 0000 .dbfile D:\ICC-AVR\examples.sl\cymometer\cymometer.c
--- 0000 .dbfunc s port_init _port_init fI
.even
0040 _port_init::
0040 .dbline 28{
; /**********************************************
; http://www.sl.com.cn
; 双龙电子公司----频率计演示程序(ICCAVR)
; 作者:詹卫前
; 1、学习定时器T1捕捉(捕获)中断的使用
; 2、学习频率计的设计方法
; 3、通过对timecount的修改,可实现多量程
; 频率计编程。
; **********************************************/
; #include <io8515.h>
; #include <macros.h>
; #pragma interrupt_handler timer0:8
; #pragma interrupt_handler timer1:4
; extern void delay_ms(unsigned int n);//引用外部函数
; extern void delay_1ms(void);
; #pragma data:code
; /* 七段译码字形表 */
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; #pragma data:data
; /* 显示缓冲区 */
; unsigned char ledbuff[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};
; unsigned long count;//频率测量计数变量
; unsigned int timecount;//频率测量闸门控制变量
; /******************************
; 初始化
; ******************************/
; void port_init(void)
; {
0040 .dbline 29
; MCUCR=0x00;
0040 2422 clr R2
0041 BE25 out 0x35,R2
0042 .dbline 30
; DDRD=0x3f;
0042 E38F ldi R24,63
0043 BB81 out 0x11,R24
0044 .dbline 31
; DDRB=0xff;
0044 EF8F ldi R24,255
0045 BB87 out 0x17,R24
0046 .dbline 32
; PORTD=0xff;
0046 BB82 out 0x12,R24
0047 .dbline 33
; PORTB=0xff;
0047 BB88 out 0x18,R24
0048 .dbline 34
; TIMSK=0x0a;//开放T0溢出中断和T1捕捉中断
0048 E08A ldi R24,10
0049 BF89 out 0x39,R24
004A .dbline 35
; TCCR0=0x03;
004A E083 ldi R24,3
004B BF83 out 0x33,R24
004C .dbline 36
; TCCR1A=0x00;
004C BC2F out 0x2f,R2
004D .dbline 37
; TCCR1B=0xc0;
004D EC80 ldi R24,192
004E BD8E out 0x2e,R24
004F .dbline 38
; TCNT0=0x83;
004F E883 ldi R24,131
0050 BF82 out 0x32,R24
0051 .dbline 39
; timecount=1000;
0051 EE88 ldi R24,1000
0052 E093 ldi R25,3
0053 93900067 sts _timecount+1,R25
0055 93800066 sts _timecount,R24
0057 .dbline 40}
; }
0057 L1:
0057 9508 ret
0058 .dbfunc s display _display fI
; i -> R20
.even
0058 _display::
0058 D129 rcall push_gset1
0059 .dbline 45{
; /******************************
; 六路动态扫描显示电路
; ******************************/
; void display(void)
; {
0059 .dbline 47
; unsigned char i;
; for (i=0;i<6;i++)
0059 2744 clr R20
005A C016 rjmp L6
005B L3:
005B .dbline 48
005B .dbline 49
005B E680 ldi R24,<_ledbuff
005C E090 ldi R25,>_ledbuff
005D 2FE4 mov R30,R20
005E 27FF clr R31
005F 0FE8 add R30,R24
0060 1FF9 adc R31,R25
0061 8020 ldd R2,z+0
0062 BA28 out 0x18,R2
0063 .dbline 50
0063 E001 ldi R16,1
0064 2F14 mov R17,R20
0065 D154 rcall lsl8
0066 2E20 mov R2,R16
0067 9420 com R2
0068 BA22 out 0x12,R2
0069 .dbline 51
0069 D0D2 rcall _delay_1ms
006A .dbline 52
006A E001 ldi R16,1
006B 2F14 mov R17,R20
006C D14D rcall lsl8
006D B222 in R2,0x12
006E 2A20 or R2,R16
006F BA22 out 0x12,R2
0070 .dbline 53
0070 L4:
0070 .dbline 47
0070 9543 inc R20
0071 L6:
0071 .dbline 47
0071 3046 cpi R20,6
0072 F340 brlo L3
0073 .dbline 54}
; {
; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
; PORTD=~(1<<i); //开始显示
; delay_1ms(); //每一位显示保持一定时间
; PORTD|=(1<<i); //关闭显示
; }
; }
0073 L2:
0073 D111 rcall pop_gset1
0074 9508 ret
0075 .dbsym r i 20 c
0075 .dbfunc s hextobcd _hextobcd fI
; temp -> R10
; i -> R12
.even
0075 _hextobcd::
0075 D129 rcall push_gset4
0076 .dbline 59{
; /************************************
; 将count十六进制数据转换为LED七段码
; ************************************/
; void hextobcd(void)
; {
0076 .dbline 61
; unsigned char i,temp;
; for (i=0;i<6;i++)
0076 24CC clr R12
0077 C042 rjmp L11
0078 L8:
0078 .dbline 62
0078 .dbline 62
0078 E306 ldi R16,<L12
0079 E010 ldi R17,>L12
007A D12B rcall lpm32
007B 9050006B lds R5,_count+2+1
007D 9040006A lds R4,_count+2
007F 90300069 lds R3,_count+1
0081 90200068 lds R2,_count
0083 933A st -y,R19
0084 932A st -y,R18
0085 931A st -y,R17
0086 930A st -y,R16
0087 2D02 mov R16,R2
0088 2D13 mov R17,R3
0089 2D24 mov R18,R4
008A 2D35 mov R19,R5
008B D17C rcall mod32u
008C 2EA0 mov R10,R16
008D .dbline 63
008D E18A ldi R24,<_tabel
008E E090 ldi R25,>_tabel
008F 2C2A mov R2,R10
0090 2433 clr R3
0091 0E28 add R2,R24
0092 1E39 adc R3,R25
0093 2DE2 mov R30,R2
0094 2DF3 mov R31,R3
0095 95C8 lpm
0096 E680 ldi R24,<_ledbuff
0097 E090 ldi R25,>_ledbuff
0098 2DEC mov R30,R12
0099 27FF clr R31
009A 0FE8 add R30,R24
009B 1FF9 adc R31,R25
009C 8200 std z+0,R0
009D .dbline 64
009D E306 ldi R16,<L12
009E E010 ldi R17,>L12
009F D106 rcall lpm32
00A0 9050006B lds R5,_count+2+1
00A2 9040006A lds R4,_count+2
00A4 90300069 lds R3,_count+1
00A6 90200068 lds R2,_count
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -