📄 ad_led.lis
字号:
.module ad_led.c
.area lit(rom, con, rel)
0000 _tabel::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 .dbfile D:\ICC-AVR\examples.sl\AD_8535_LED\ad_led.c
0010 .dbsym s tabel _tabel A[16:16]c
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\examples.sl\AD_8535_LED\ad_led.c
0000 .dbfunc s port_init _port_init fI
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 23
; /******************************************************
; 双龙电子公司http://www.sl.com.cn
; AT90S8535--AD转换演示程序(ICCAVR)
; 作者:詹卫前
; 使用注意:1、应包含头文件slavr.h
; 2、在工程选项中的Additional Lib中填入slavr
; 使用编译器使用附加库文件libslavr.a
; 3、使用SL-AVRAD实验设备
; 接线说明:1、PA.0(PIN40)处接电平指示LED的短路块断开
; 2、A/D和VX之间的短路块闭合
; 3、AREF(PIN32)和AVCC(PIN30)接VCC
; 4、AGND(PIN31)接GND
; *******************************************************/
; #include<io8535.h>
; #include<slavr.h>
; #include<macros.h>
; /* 七段译码字形表 */
; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
; 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
; /* 显示缓冲区 */
; unsigned char ledbuff[6];
; void port_init(void)//端口初始化
; {
0000 .dbline 24
; DDRD=0x3f;
0000 8FE3 ldi R24,63
0002 81BB out 0x11,R24
0004 .dbline 25
; DDRB=0xff;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 26
; PORTD=0xff;
0008 82BB out 0x12,R24
000A .dbline 27
; PORTB=0xff;
000A 88BB out 0x18,R24
000C .dbline -2
000C .dbline 28
; }
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbfunc s display _display fI
; i -> R20
.even
000E _display::
000E 00D0 rcall push_gset1
0010 .dbline -1
0010 .dbline 30
; void display(void)//六路动态扫描显示电路
; {
0010 .dbline 32
; unsigned char i;
; for (i=0;i<6;i++)
0010 4427 clr R20
0012 16C0 rjmp L6
0014 L3:
0014 .dbline 33
0014 .dbline 34
0014 80E0 ldi R24,<_ledbuff
0016 90E0 ldi R25,>_ledbuff
0018 E42F mov R30,R20
001A FF27 clr R31
001C E80F add R30,R24
001E F91F adc R31,R25
0020 2080 ldd R2,z+0
0022 28BA out 0x18,R2
0024 .dbline 35
0024 01E0 ldi R16,1
0026 142F mov R17,R20
0028 00D0 rcall lsl8
002A 202E mov R2,R16
002C 2094 com R2
002E 22BA out 0x12,R2
0030 .dbline 36
0030 00D0 rcall _delay_1ms
0032 .dbline 37
0032 01E0 ldi R16,1
0034 142F mov R17,R20
0036 00D0 rcall lsl8
0038 22B2 in R2,0x12
003A 202A or R2,R16
003C 22BA out 0x12,R2
003E .dbline 38
003E L4:
003E .dbline 32
003E 4395 inc R20
0040 L6:
0040 .dbline 32
0040 4630 cpi R20,6
0042 40F3 brlo L3
0044 .dbline -2
0044 .dbline 39
; {
; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
; PORTD=~(1<<i); //开始显示
; delay_1ms(); //每一位显示保持一定时间
; PORTD|=(1<<i); //关闭显示
; }
; }
0044 L2:
0044 00D0 rcall pop_gset1
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r i 20 c
0048 .dbfunc s adctovol _adctovol fI
; char_p -> <dead>
; i -> R10
; temp -> R12,R13
; adc -> R10,R11
.even
0048 _adctovol::
0048 00D0 rcall push_gset4
004A A02E mov R10,R16
004C B12E mov R11,R17
004E .dbline -1
004E .dbline 44
; unsigned int ad_con;//存放PA0的AD转换结果
; /* 将AD结果转换成电压 */
; #define vref 497
; void adctovol(unsigned int adc)
; {
004E .dbline 48
; unsigned int temp;
; unsigned char i;
; unsigned char *char_p;
; temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
004E 2A2C mov R2,R10
0050 3B2C mov R3,R11
0052 4424 clr R4
0054 5524 clr R5
0056 41EF ldi R20,241
0058 51E0 ldi R21,1
005A 60E0 ldi R22,0
005C 70E0 ldi R23,0
005E 5A92 st -y,R5
0060 4A92 st -y,R4
0062 3A92 st -y,R3
0064 2A92 st -y,R2
0066 042F mov R16,R20
0068 152F mov R17,R21
006A 262F mov R18,R22
006C 372F mov R19,R23
006E 00D0 rcall mpy32u
0070 8AE0 ldi R24,10
0072 90E0 ldi R25,0
0074 8A93 st -y,R24
0076 00D0 rcall lsr32
0078 C02E mov R12,R16
007A D12E mov R13,R17
007C .dbline 49
; for(i=0;i<3;i++)
007C AA24 clr R10
007E 1DC0 rjmp L11
0080 L8:
0080 .dbline 50
0080 .dbline 51
0080 2AE0 ldi R18,10
0082 30E0 ldi R19,0
0084 0C2D mov R16,R12
0086 1D2D mov R17,R13
0088 00D0 rcall mod16u
008A 202E mov R2,R16
008C 312E mov R3,R17
008E 80E0 ldi R24,<_tabel
0090 90E0 ldi R25,>_tabel
0092 280E add R2,R24
0094 391E adc R3,R25
0096 E22D mov R30,R2
0098 F32D mov R31,R3
009A C895 lpm
009C 80E0 ldi R24,<_ledbuff
009E 90E0 ldi R25,>_ledbuff
00A0 EA2D mov R30,R10
00A2 FF27 clr R31
00A4 E80F add R30,R24
00A6 F91F adc R31,R25
00A8 0082 std z+0,R0
00AA .dbline 52
00AA 2AE0 ldi R18,10
00AC 30E0 ldi R19,0
00AE 0C2D mov R16,R12
00B0 1D2D mov R17,R13
00B2 00D0 rcall div16u
00B4 C02E mov R12,R16
00B6 D12E mov R13,R17
00B8 .dbline 53
00B8 L9:
00B8 .dbline 49
00B8 A394 inc R10
00BA L11:
00BA .dbline 49
00BA 8A2D mov R24,R10
00BC 8330 cpi R24,3
00BE 00F3 brlo L8
00C0 .dbline 54
; {
; ledbuff[i]=tabel[temp%10];
; temp=temp/10;
; }
; ledbuff[5]=tabel[0x0a];
00C0 80E0 ldi R24,<_tabel+10
00C2 90E0 ldi R25,>_tabel+10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -