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

📄 lesson8.lis

📁 基于AVR的模数转换程序。是开发单片机必备的基本技巧。 本程序出自高手之手
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module lesson8.c
                        .area text(rom, con, rel)
 0000                   .dbfile I:\AVR视频教程\视频教程\lesson8\lesson8/Skey.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              i -> R20,R21
 0000           ;              j -> R22,R23
 0000           ;             ms -> R16,R17
                        .even
 0000           _delay::
 0000 00D0              rcall push_gset2
 0002                   .dbline -1
 0002                   .dbline 2
 0002           ; #include <iom16v.h>
 0002           ; #include <macros.h>
 0002                   .dbline 4
 0002           ; #define  uchar unsigned char
 0002           ; #define  uint  unsigned int
 0002 4427              clr R20
 0004 5527              clr R21
 0006 0BC0              rjmp L5
 0008           L2:
 0008                   .dbline 5
 0008           ; #include "Skey.c"
 0008                   .dbline 6
 0008 6627              clr R22
 000A 7727              clr R23
 000C 02C0              rjmp L9
 000E           L6:
 000E                   .dbline 6
 000E           L7:
 000E                   .dbline 6
 000E 6F5F              subi R22,255  ; offset = 1
 0010 7F4F              sbci R23,255
 0012           L9:
 0012                   .dbline 6
 0012 6537              cpi R22,117
 0014 E4E0              ldi R30,4
 0016 7E07              cpc R23,R30
 0018 D0F3              brlo L6
 001A                   .dbline 7
 001A           L3:
 001A                   .dbline 4
 001A 4F5F              subi R20,255  ; offset = 1
 001C 5F4F              sbci R21,255
 001E           L5:
 001E                   .dbline 4
 001E 4017              cp R20,R16
 0020 5107              cpc R21,R17
 0022 90F3              brlo L2
 0024                   .dbline -2
 0024                   .dbline 8
 0024           ; void spi_init()
 0024           ; {
 0024           ;      DDRB|=0XA0;
 0024           L1:
 0024 00D0              rcall pop_gset2
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 20 i
 0028                   .dbsym r j 22 i
 0028                   .dbsym r ms 16 i
 0028                   .dbend
 0028                   .dbfunc e key_press _key_press fc
 0028           ;              j -> R16
                        .even
 0028           _key_press::
 0028                   .dbline -1
 0028                   .dbline 11
 0028           ;        DDRA|=BIT(PA1);
 0028           ;        SPCR=0X57;
 0028           ; }
 0028                   .dbline 13
 0028           ; void ad5300(uchar daword)
 0028           ; {
 0028 81B3              in R24,0x11
 002A 8F60              ori R24,15
 002C 81BB              out 0x11,R24
 002E                   .dbline 14
 002E           ;     uchar temp1=0,temp2=0,status;
 002E 82B3              in R24,0x12
 0030 8F60              ori R24,15
 0032 82BB              out 0x12,R24
 0034                   .dbline 16
 0034           ;     temp1|=daword<<4;//1101 1001
 0034           ;     temp2|=daword>>4;
 0034 81B3              in R24,0x11
 0036 807F              andi R24,240
 0038 81BB              out 0x11,R24
 003A                   .dbline 18
 003A           ;       
 003A           ;       PORTA&=~BIT(PA1);
 003A 00B3              in R16,0x10
 003C                   .dbline 19
 003C           ;       SPSR=0;
 003C 0F70              andi R16,15
 003E                   .dbline 20
 003E           ;       SPDR=temp2;
 003E 0F30              cpi R16,15
 0040 11F4              brne L11
 0042                   .dbline 21
 0042           ;     do
 0042                   .dbline 22
 0042           ;       {
 0042 0027              clr R16
 0044 01C0              rjmp L10
 0046           L11:
 0046                   .dbline 25
 0046           ;         status=SPSR;
 0046           ;       }while(!(status&=0X80));
 0046           ;       
 0046                   .dbline 26
 0046           ;       delay(10);
 0046 01E0              ldi R16,1
 0048                   .dbline -2
 0048           L10:
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r j 16 c
 004A                   .dbend
 004A                   .dbfunc e key_scan _key_scan fc
 004A           ;            key -> R20
                        .even
 004A           _key_scan::
 004A 00D0              rcall push_gset2
 004C                   .dbline -1
 004C                   .dbline 32
 004C           ;       SPSR=0;
 004C           ;       SPDR=temp1;
 004C           ;       do
 004C           ;       {
 004C           ;         status=SPSR;
 004C           ;       }while(!(status&=0X80));
 004C                   .dbline 34
 004C           ;       SPSR=0;
 004C           ;       delay(10);
 004C 0AE0              ldi R16,10
 004E 10E0              ldi R17,0
 0050 D7DF              rcall _delay
 0052                   .dbline 35
 0052           ;       PORTA|=BIT(PA1);
 0052 EADF              rcall _key_press
 0054 0023              tst R16
 0056 11F1              breq L14
 0058                   .dbline 36
 0058           ; } 
 0058                   .dbline 37
 0058           ; void main()
 0058 40B3              in R20,0x10
 005A                   .dbline 38
 005A           ; {
 005A 4F70              andi R20,15
 005C                   .dbline 39
 005C           ;     uchar i,data=128;
 005C 642F              mov R22,R20
 005E 7727              clr R23
 0060 6730              cpi R22,7
 0062 E0E0              ldi R30,0
 0064 7E07              cpc R23,R30
 0066 99F0              breq L22
 0068 6B30              cpi R22,11
 006A E0E0              ldi R30,0
 006C 7E07              cpc R23,R30
 006E 69F0              breq L21
 0070 6D30              cpi R22,13
 0072 E0E0              ldi R30,0
 0074 7E07              cpc R23,R30
 0076 39F0              breq L20
 0078 6E30              cpi R22,14
 007A E0E0              ldi R30,0
 007C 7E07              cpc R23,R30
 007E 09F0              breq L19
 0080 08C0              rjmp L16
 0082           X0:
 0082                   .dbline 40
 0082           ;     DDRB=0XFF;
 0082           L19:
 0082                   .dbline 42
 0082           ;       spi_init();
 0082           ;       ad5300(0);
 0082 4427              clr R20
 0084                   .dbline 43
 0084           ;       ad5300(data);
 0084 07C0              rjmp L24
 0086           L20:
 0086                   .dbline 45
 0086           ;       
 0086           ;       while(1)
 0086 41E0              ldi R20,1
 0088                   .dbline 46
 0088           ;       {
 0088 05C0              rjmp L24
 008A           L21:
 008A                   .dbline 48
 008A           ;          if(key_press())
 008A           ;          {
 008A 42E0              ldi R20,2
 008C                   .dbline 49
 008C           ;             i=key_scan();
 008C 03C0              rjmp L24
 008E           L22:
 008E                   .dbline 51
 008E           ;                 switch(i)
 008E           ;                 {
 008E 43E0              ldi R20,3
 0090                   .dbline 52
 0090           ;                   case 0:
 0090 01C0              rjmp L24
 0092           L16:
 0092                   .dbline 54
 0092           ;                         data=data+16;
 0092           ;                         break;
 0092 4427              clr R20
 0094                   .dbline 55
 0094           ;                       case 1:
 0094           L23:
 0094                   .dbline 56
 0094           L24:
 0094                   .dbline 56
 0094           ;                         data=data-16;
 0094 C9DF              rcall _key_press
 0096 0023              tst R16
 0098 E9F7              brne L23
 009A                   .dbline 57
 009A           ;                         break;
 009A 01C0              rjmp L15

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -