📄 numled.lis
字号:
.module NumLED.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
0000 _seg_table::
0000 C0F9 .byte 192,249
0002 A4B0 .byte 164,176
0004 9992 .byte 153,146
0006 82F8 .byte 130,248
0008 8090 .byte 128,144
000A 8883 .byte 136,131
000C C6A1 .byte 198,161
000E 868E .byte 134,142
0010 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
0010 .dbsym e seg_table _seg_table A[16:16]kc
.area data(ram, con, rel)
0000 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
0000 _led_buff::
0000 .blkb 2
.area idata
0000 7FFF .byte 127,255
.area data(ram, con, rel)
0002 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
0002 .blkb 2
.area idata
0002 FFFF .byte 255,255
.area data(ram, con, rel)
0004 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
0004 .dbsym e led_buff _led_buff A[4:4]c
0004 L2:
0004 .blkw 1
.area idata
0004 0000 .word _seg_table
.area data(ram, con, rel)
0006 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
.area text(rom, con, rel)
0000 .dbfile G:\Mega8程序\TCXO评估板\NumLED.c
0000 .dbfunc e ADCtoBCD _ADCtoBCD fV
0000 .dbsym s pStr L2 pkc
0000 ; i -> R10
0000 ; temp -> R12,R13
.even
0000 _ADCtoBCD::
0000 00D0 rcall push_gset4
0002 6801 movw R12,R16
0004 .dbline -1
0004 .dbline 21
0004 ; /* 目标MCU:MEGA8 晶振:内部RC(INT) 8MHZ,该模块中使用了seg_table[16]数组
0004 ; 来表示LED的16个字符0~F,led_buff[4]表示4个LED的字符代码*/
0004 ; #include<iom8v.h>
0004 ; #include <macros.h>
0004 ; #define Vref 4995
0004 ;
0004 ; #pragma data:code
0004 ; const unsigned char seg_table[16]={0xc0,0xf9,0xa4,0xb0,
0004 ; 0x99,0x92,0x82,0xf8,
0004 ; 0x80,0x90,0x88,0x83,
0004 ; 0xc6,0xa1,0x86,0x8e};
0004 ; /*LED Code:定义在Flash中 0,1,2,3,
0004 ; 4,5,6,7,
0004 ; 8,9,A,B,
0004 ; C,D,E,F
0004 ; */
0004 ;
0004 ; #pragma data:data
0004 ; unsigned char led_buff[4]={0x7F,0xFF,0xFF,0xFF};//首位为"."点,其他位没有显示
0004 ; void ADCtoBCD(unsigned int temp)//16进制数值转换为BCD码,12精度
0004 ; {
0004 .dbline 24
0004 ; unsigned char i;
0004 ; static const unsigned char *pStr=seg_table;
0004 ; temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/0xfff);
0004 1601 movw R2,R12
0006 4424 clr R4
0008 5524 clr R5
000A 43E8 ldi R20,131
000C 53E1 ldi R21,19
000E 60E0 ldi R22,0
0010 70E0 ldi R23,0
0012 5A92 st -y,R5
0014 4A92 st -y,R4
0016 3A92 st -y,R3
0018 2A92 st -y,R2
001A 8A01 movw R16,R20
001C 9B01 movw R18,R22
001E 00D0 rcall empy32u
0020 4FEF ldi R20,255
0022 5FE0 ldi R21,15
0024 60E0 ldi R22,0
0026 70E0 ldi R23,0
0028 7A93 st -y,R23
002A 6A93 st -y,R22
002C 5A93 st -y,R21
002E 4A93 st -y,R20
0030 00D0 rcall div32u
0032 6801 movw R12,R16
0034 .dbline 25
0034 ; for(i=0;i<4;i++)
0034 AA24 clr R10
0036 19C0 rjmp L6
0038 L3:
0038 .dbline 26
0038 .dbline 27
0038 2AE0 ldi R18,10
003A 30E0 ldi R19,0
003C 8601 movw R16,R12
003E 00D0 rcall mod16u
0040 F801 movw R30,R16
0042 20900400 lds R2,L2
0046 30900500 lds R3,L2+1
004A E20D add R30,R2
004C F31D adc R31,R3
004E E491 lpm R30,Z
0050 80E0 ldi R24,<_led_buff
0052 90E0 ldi R25,>_led_buff
0054 AA2D mov R26,R10
0056 BB27 clr R27
0058 A80F add R26,R24
005A B91F adc R27,R25
005C EC93 st x,R30
005E .dbline 28
005E 2AE0 ldi R18,10
0060 30E0 ldi R19,0
0062 8601 movw R16,R12
0064 00D0 rcall div16u
0066 6801 movw R12,R16
0068 .dbline 29
0068 L4:
0068 .dbline 25
0068 A394 inc R10
006A L6:
006A .dbline 25
006A 8A2D mov R24,R10
006C 8430 cpi R24,4
006E 20F3 brlo L3
0070 .dbline 30
0070 ; {
0070 ; led_buff[i]=*(pStr+temp%10);
0070 ; temp=temp/10;
0070 ; }
0070 ; led_buff[3]&=0x7f;
0070 80910300 lds R24,_led_buff+3
0074 8F77 andi R24,127
0076 80930300 sts _led_buff+3,R24
007A .dbline -2
007A L1:
007A 00D0 rcall pop_gset4
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r i 10 c
007E .dbsym r temp 12 i
007E .dbend
007E .dbfunc e led_init _led_init fV
.even
007E _led_init::
007E .dbline -1
007E .dbline 33
007E ; }
007E ; void led_init(void)
007E ; {
007E .dbline 34
007E ; DDRB|=0xff;
007E 87B3 in R24,0x17
0080 8F6F ori R24,255
0082 87BB out 0x17,R24
0084 .dbline 36
0084 ; //方向:输出
0084 ; PORTB|=0xff;
0084 88B3 in R24,0x18
0086 8F6F ori R24,255
0088 88BB out 0x18,R24
008A .dbline 38
008A ; //LED数据-
008A ; DDRD|=0xf0;
008A 81B3 in R24,0x11
008C 806F ori R24,240
008E 81BB out 0x11,R24
0090 .dbline 40
0090 ; //D口高位输出,单只选通4个LED功能
0090 ; PORTD|=0xf0;
0090 82B3 in R24,0x12
0092 806F ori R24,240
0094 82BB out 0x12,R24
0096 .dbline -2
0096 L8:
0096 .dbline 0 ; func end
0096 0895 ret
0098 .dbend
0098 .dbfunc e spark _spark fV
0098 ; num -> R20
.even
0098 _spark::
0098 00D0 rcall push_gset1
009A 402F mov R20,R16
009C .dbline -1
009C .dbline 44
009C ; //高位输出高电平,LED全部熄灭.低位输入,全部为高阻态,如果为1,则带上拉电阻
009C ; }
009C ; void spark(unsigned char num)
009C ; {
009C .dbline 45
009C ; PORTB=led_buff[num];
009C 80E0 ldi R24,<_led_buff
009E 90E0 ldi R25,>_led_buff
00A0 E42F mov R30,R20
00A2 FF27 clr R31
00A4 E80F add R30,R24
00A6 F91F adc R31,R25
00A8 2080 ldd R2,z+0
00AA 28BA out 0x18,R2
00AC .dbline 46
00AC ; PORTD=0xf0&(~(1<<(num+4)));
00AC 142F mov R17,R20
00AE 1C5F subi R17,252 ; addi 4
00B0 01E0 ldi R16,1
00B2 00D0 rcall lsl8
00B4 802F mov R24,R16
00B6 8095 com R24
00B8 807F andi R24,240
00BA 82BB out 0x12,R24
00BC .dbline -2
00BC L9:
00BC 00D0 rcall pop_gset1
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbsym r num 20 c
00C0 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -