📄 led+ad.lis
字号:
.module LED+AD.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 F:\李鹏飞\sl-avrad-m16\LED+AD\LED+AD.C
0010 .dbsym e tabel _tabel A[16:16]kc
.area text(rom, con, rel)
0000 .dbfile F:\李鹏飞\sl-avrad-m16\LED+AD\LED+AD.C
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 23
0000 ; /******************************************************
0000 ; 双龙电子公司http://www.sl.com.cn
0000 ; AT90S8535--AD转换演示程序(ICCAVR)
0000 ; 作者:詹卫前
0000 ; 使用注意:1、应包含头文件slavr.h
0000 ; 2、在工程选项中的Additional Lib中填入slavr
0000 ; 使用编译器使用附加库文件libslavr.a
0000 ; 3、使用SL-AVRAD实验设备
0000 ; 接线说明:1、PA.0(PIN40)处接电平指示LED的短路块断开
0000 ; 2、A/D和VX之间的短路块闭合
0000 ; 3、AREF(PIN32)和AVCC(PIN30)接VCC
0000 ; 4、AGND(PIN31)接GND
0000 ; *******************************************************/
0000 ; #include<iom16v.h>
0000 ; #include<slavr.h>
0000 ; #include<macros.h>
0000 ; /* 七段译码字形表 */
0000 ; const unsigned char tabel[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0000 ; 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
0000 ; /* 显示缓冲区 */
0000 ; unsigned char ledbuff[6];
0000 ; void port_init(void)//端口初始化
0000 ; {
0000 .dbline 24
0000 ; DDRD=0x3f;
0000 8FE3 ldi R24,63
0002 81BB out 0x11,R24
0004 .dbline 25
0004 ; DDRB=0xff;
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 .dbline 26
0008 ; PORTD=0xff;
0008 82BB out 0x12,R24
000A .dbline 27
000A ; PORTB=0xff;
000A 88BB out 0x18,R24
000C .dbline -2
000C .dbline 28
000C ; }
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e display _display fV
000E ; i -> R10
.even
000E _display::
000E 0E940000 xcall push_gset3x
0012 .dbline -1
0012 .dbline 30
0012 ; void display(void)//六路动态扫描显示电路
0012 ; {
0012 .dbline 32
0012 ; unsigned char i;
0012 ; for (i=0;i<6;i++)
0012 AA24 clr R10
0014 19C0 xjmp L6
0016 L3:
0016 .dbline 33
0016 .dbline 34
0016 80E0 ldi R24,<_ledbuff
0018 90E0 ldi R25,>_ledbuff
001A EA2D mov R30,R10
001C FF27 clr R31
001E E80F add R30,R24
0020 F91F adc R31,R25
0022 2080 ldd R2,z+0
0024 28BA out 0x18,R2
0026 .dbline 35
0026 01E0 ldi R16,1
0028 1A2D mov R17,R10
002A 0E940000 xcall lsl8
002E 202E mov R2,R16
0030 2094 com R2
0032 22BA out 0x12,R2
0034 .dbline 36
0034 0E940000 xcall _delay_1ms
0038 .dbline 37
0038 01E0 ldi R16,1
003A 1A2D mov R17,R10
003C 0E940000 xcall lsl8
0040 22B2 in R2,0x12
0042 202A or R2,R16
0044 22BA out 0x12,R2
0046 .dbline 38
0046 L4:
0046 .dbline 32
0046 A394 inc R10
0048 L6:
0048 .dbline 32
0048 8A2D mov R24,R10
004A 8630 cpi R24,6
004C 20F3 brlo L3
004E .dbline -2
004E .dbline 39
004E ; {
004E ; PORTB=ledbuff[i];//将显示缓冲区数据送PORTB口
004E ; PORTD=~(1<<i); //开始显示
004E ; delay_1ms(); //每一位显示保持一定时间
004E ; PORTD|=(1<<i); //关闭显示
004E ; }
004E ; }
004E L2:
004E 0E940000 xcall pop_gset3x
0052 .dbline 0 ; func end
0052 0895 ret
0054 .dbsym r i 10 c
0054 .dbend
0054 .dbfunc e adctovol _adctovol fV
0054 ; char_p -> <dead>
0054 ; i -> R10
0054 ; temp -> R12,R13
0054 ; adc -> R10,R11
.even
0054 _adctovol::
0054 0E940000 xcall push_gset4x
0058 5801 movw R10,R16
005A .dbline -1
005A .dbline 44
005A ; unsigned int ad_con;//存放PA0的AD转换结果
005A ; /* 将AD结果转换成电压 */
005A ; #define vref 497
005A ; void adctovol(unsigned int adc)
005A ; {
005A .dbline 48
005A ; unsigned int temp;
005A ; unsigned char i;
005A ; unsigned char *char_p;
005A ; temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
005A 1501 movw R2,R10
005C 4424 clr R4
005E 5524 clr R5
0060 81EF ldi R24,241
0062 91E0 ldi R25,1
0064 A0E0 ldi R26,0
0066 B0E0 ldi R27,0
0068 5A92 st -y,R5
006A 4A92 st -y,R4
006C 3A92 st -y,R3
006E 2A92 st -y,R2
0070 8C01 movw R16,R24
0072 9D01 movw R18,R26
0074 0E940000 xcall empy32u
0078 8AE0 ldi R24,10
007A 90E0 ldi R25,0
007C 8A93 st -y,R24
007E 0E940000 xcall lsr32
0082 6801 movw R12,R16
0084 .dbline 49
0084 ; for(i=0;i<3;i++)
0084 AA24 clr R10
0086 19C0 xjmp L11
0088 L8:
0088 .dbline 50
0088 .dbline 51
0088 2AE0 ldi R18,10
008A 30E0 ldi R19,0
008C 8601 movw R16,R12
008E 0E940000 xcall mod16u
0092 F801 movw R30,R16
0094 80E0 ldi R24,<_tabel
0096 90E0 ldi R25,>_tabel
0098 E80F add R30,R24
009A F91F adc R31,R25
009C E491 lpm R30,Z
009E 80E0 ldi R24,<_ledbuff
00A0 90E0 ldi R25,>_ledbuff
00A2 AA2D mov R26,R10
00A4 BB27 clr R27
00A6 A80F add R26,R24
00A8 B91F adc R27,R25
00AA EC93 st x,R30
00AC .dbline 52
00AC 2AE0 ldi R18,10
00AE 30E0 ldi R19,0
00B0 8601 movw R16,R12
00B2 0E940000 xcall div16u
00B6 6801 movw R12,R16
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 20F3 brlo L8
00C0 .dbline 54
00C0 ; {
00C0 ; ledbuff[i]=tabel[temp%10];
00C0 ; temp=temp/10;
00C0 ; }
00C0 ; ledbuff[5]=tabel[0x0a];
00C0 E0E0 ldi R30,<_tabel+10
00C2 F0E0 ldi R31,>_tabel+10
00C4 E491 lpm R30,Z
00C6 E0930700 sts _ledbuff+5,R30
00CA .dbline 55
00CA ; ledbuff[4]=tabel[0x0d];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -