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

📄 1602b_lcd_test.lis

📁 用avr的m16产生pwm波控制舵机的程序!
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module _1602B_LCD_TEST.c
                        .area data(ram, con, rel)
 0000           _n::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
 0001                   .dbsym e n _n c
 0001           _t::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
 0002                   .dbsym e t _t c
                        .area vector(rom, abs)
                        .org 16
 0010 0C940000          jmp _timer2_ovf_isr
                        .area data(ram, con, rel)
 0002                   .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\mcu\avr\test\1602_duoji\1602B_LCD_TEST.c
 0000                   .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
                        .even
 0000           _timer2_ovf_isr::
 0000 2A92              st -y,R2
 0002 3A92              st -y,R3
 0004 8A93              st -y,R24
 0006 9A93              st -y,R25
 0008 2FB6              in R2,0x3f
 000A 2A92              st -y,R2
 000C                   .dbline -1
 000C                   .dbline 18
 000C           ; #include <iom16v.h>
 000C           ; #include <macros.h>
 000C           ; #include "1602LCD.h"
 000C           ; volatile int zkb;
 000C           ; volatile int zq;          
 000C           ; volatile int t1,t2;
 000C           ; uchar n=0,t=0;
 000C           ; void delay_1ms(void); //函数声明,本实验中会用到这两个函数
 000C           ; void delay_nms(unsigned int n);  
 000C           ; /*DS1302函数声明*/
 000C           ; void write_data(uchar addr,uchar data);
 000C           ; uchar read_data(uchar addr);
 000C           ; void init_1302(void);
 000C           ; void init_time(uchar sec,uchar min,uchar hour,uchar day,uchar month,uchar d,uchar year);
 000C           ; //PWM信号产生中断函数
 000C           ; #pragma interrupt_handler timer2_ovf_isr:5
 000C           ; void timer2_ovf_isr(void)
 000C           ; {
 000C                   .dbline 21
 000C           ; // Reinitialize Timer 2 value
 000C           ; //每次触发为20微秒
 000C           ; TCNT2 = 0xF1;           //反转值,理论值为0xEC 但是实测值为0xEF  有点没搞懂  ??
 000C 81EF              ldi R24,241
 000E 84BD              out 0x24,R24
 0010                   .dbline 23
 0010           ; 
 0010           ;   if((--zq)==0)
 0010 80910400          lds R24,_zq
 0014 90910500          lds R25,_zq+1
 0018 0197              sbiw R24,1
 001A 90930500          sts _zq+1,R25
 001E 80930400          sts _zq,R24
 0022 8030              cpi R24,0
 0024 8907              cpc R24,R25
 0026 C9F4              brne L2
 0028           X0:
 0028                   .dbline 24
 0028           ;   {      
 0028                   .dbline 25
 0028           ;     PORTC^=0B00000001;    //PORTB.0 反转  
 0028 81E0              ldi R24,1
 002A 25B2              in R2,0x15
 002C 2826              eor R2,R24
 002E 25BA              out 0x15,R2
 0030                   .dbline 26
 0030           ;     if((PORTC&0x01)==0x01)
 0030 85B3              in R24,0x15
 0032 8170              andi R24,1
 0034 8130              cpi R24,1
 0036 49F4              brne L4
 0038                   .dbline 27
 0038           ;       {
 0038                   .dbline 28
 0038           ;       zq=t1; 
 0038 20900200          lds R2,_t1
 003C 30900300          lds R3,_t1+1
 0040 30920500          sts _zq+1,R3
 0044 20920400          sts _zq,R2
 0048                   .dbline 29
 0048           ;     }else
 0048 08C0              xjmp L5
 004A           L4:
 004A                   .dbline 30
 004A           ;     {
 004A                   .dbline 31
 004A           ;       zq=t2;
 004A 20900000          lds R2,_t2
 004E 30900100          lds R3,_t2+1
 0052 30920500          sts _zq+1,R3
 0056 20920400          sts _zq,R2
 005A                   .dbline 32
 005A           ;     }          
 005A           L5:
 005A                   .dbline 33
 005A           L2:
 005A                   .dbline -2
 005A           L1:
 005A 2990              ld R2,y+
 005C 2FBE              out 0x3f,R2
 005E 9991              ld R25,y+
 0060 8991              ld R24,y+
 0062 3990              ld R3,y+
 0064 2990              ld R2,y+
 0066                   .dbline 0 ; func end
 0066 1895              reti
 0068                   .dbend
 0068                   .dbfunc e timer2_init _timer2_init fV
                        .even
 0068           _timer2_init::
 0068                   .dbline -1
 0068                   .dbline 36
 0068           ;   }
 0068           ; }
 0068           ; void timer2_init(void)//50kHz
 0068           ; {
 0068                   .dbline 38
 0068           ;  //TCCR2 = 0x00; //stop
 0068           ; ASSR=0x00;
 0068 2224              clr R2
 006A 22BC              out 0x22,R2
 006C                   .dbline 39
 006C           ; TCCR2=0x02;
 006C 82E0              ldi R24,2
 006E 85BD              out 0x25,R24
 0070                   .dbline 40
 0070           ; TCNT2=0xEF;
 0070 8FEE              ldi R24,239
 0072 84BD              out 0x24,R24
 0074                   .dbline 41
 0074           ; OCR2=0x00;
 0074 23BC              out 0x23,R2
 0076                   .dbline -2
 0076           L6:
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbend
 0078                   .dbfunc e showtime _showtime fV
 0078           ;              i -> <dead>
 0078           ;             th -> R22
 0078           ;             tl -> R20
 0078           ;              s -> R10
                        .even
 0078           _showtime::
 0078 0E940000          xcall push_gset3
 007C 2297              sbiw R28,2
 007E                   .dbline -1
 007E                   .dbline 47
 007E           ; }
 007E           ; /************************************************
 007E           ; 1302显示子程序
 007E           ; ************************************************/
 007E           ; void showtime()
 007E           ; {
 007E                   .dbline 50
 007E           ;         uchar s,i,th,tl;
 007E           ;  //1302
 007E           ;      s=read_data(0x8b);
 007E 0BE8              ldi R16,139
 0080 0E940000          xcall _read_data
 0084 A02E              mov R10,R16
 0086                   .dbline 51
 0086           ;        tl=s&0x0f;
 0086 4A2D              mov R20,R10
 0088 4F70              andi R20,15
 008A                   .dbline 52
 008A           ;         switch(tl)
 008A 642F              mov R22,R20
 008C 7727              clr R23
 008E 6130              cpi R22,1
 0090 E0E0              ldi R30,0
 0092 7E07              cpc R23,R30
 0094 C9F0              breq L11
 0096 6230              cpi R22,2
 0098 E0E0              ldi R30,0
 009A 7E07              cpc R23,R30
 009C F1F0              breq L13
 009E 6330              cpi R22,3
 00A0 E0E0              ldi R30,0
 00A2 7E07              cpc R23,R30
 00A4 19F1              breq L15
 00A6 6430              cpi R22,4
 00A8 E0E0              ldi R30,0
 00AA 7E07              cpc R23,R30
 00AC 41F1              breq L17
 00AE 6530              cpi R22,5
 00B0 E0E0              ldi R30,0
 00B2 7E07              cpc R23,R30
 00B4 69F1              breq L19
 00B6 6630              cpi R22,6
 00B8 E0E0              ldi R30,0
 00BA 7E07              cpc R23,R30
 00BC 91F1              breq L21
 00BE 6730              cpi R22,7
 00C0 E0E0              ldi R30,0
 00C2 7E07              cpc R23,R30
 00C4 B9F1              breq L23
 00C6 3EC0              xjmp L8
 00C8           X1:
 00C8                   .dbline 53
 00C8           ;                       {
 00C8           L11:
 00C8                   .dbline 54
 00C8           ;                       case 1:LCD_write_string(0,0,"monday");break;
 00C8 80E0              ldi R24,<L12
 00CA 90E0              ldi R25,>L12
 00CC 9983              std y+1,R25
 00CE 8883              std y+0,R24
 00D0 2227              clr R18
 00D2 0027              clr R16
 00D4 0E940000          xcall _LCD_write_string
 00D8                   .dbline 54
 00D8 35C0              xjmp L9
 00DA           L13:
 00DA                   .dbline 55
 00DA           ;                       case 2:LCD_write_string(0,0,"tuesday");break;
 00DA 80E0              ldi R24,<L14
 00DC 90E0              ldi R25,>L14
 00DE 9983              std y+1,R25
 00E0 8883              std y+0,R24
 00E2 2227              clr R18
 00E4 0027              clr R16
 00E6 0E940000          xcall _LCD_write_string
 00EA                   .dbline 55
 00EA 2CC0              xjmp L9
 00EC           L15:
 00EC                   .dbline 56
 00EC           ;                       case 3:LCD_write_string(0,0,"wednesday");break;
 00EC 80E0              ldi R24,<L16
 00EE 90E0              ldi R25,>L16
 00F0 9983              std y+1,R25
 00F2 8883              std y+0,R24
 00F4 2227              clr R18
 00F6 0027              clr R16
 00F8 0E940000          xcall _LCD_write_string
 00FC                   .dbline 56
 00FC 23C0              xjmp L9
 00FE           L17:
 00FE                   .dbline 57
 00FE           ;                       case 4:LCD_write_string(0,0,"thursday");break;
 00FE 80E0              ldi R24,<L18
 0100 90E0              ldi R25,>L18
 0102 9983              std y+1,R25
 0104 8883              std y+0,R24
 0106 2227              clr R18
 0108 0027              clr R16
 010A 0E940000          xcall _LCD_write_string
 010E                   .dbline 57
 010E 1AC0              xjmp L9
 0110           L19:
 0110                   .dbline 58
 0110           ;                       case 5:LCD_write_string(0,0,"friday");break;
 0110 80E0              ldi R24,<L20
 0112 90E0              ldi R25,>L20
 0114 9983              std y+1,R25
 0116 8883              std y+0,R24
 0118 2227              clr R18
 011A 0027              clr R16
 011C 0E940000          xcall _LCD_write_string
 0120                   .dbline 58
 0120 11C0              xjmp L9
 0122           L21:
 0122                   .dbline 59
 0122           ;                       case 6:LCD_write_string(0,0,"saturday");break;
 0122 80E0              ldi R24,<L22
 0124 90E0              ldi R25,>L22
 0126 9983              std y+1,R25
 0128 8883              std y+0,R24
 012A 2227              clr R18
 012C 0027              clr R16
 012E 0E940000          xcall _LCD_write_string
 0132                   .dbline 59
 0132 08C0              xjmp L9
 0134           L23:
 0134                   .dbline 60
 0134           ;                       case 7:LCD_write_string(0,0,"sunday");break;
 0134 80E0              ldi R24,<L24
 0136 90E0              ldi R25,>L24
 0138 9983              std y+1,R25
 013A 8883              std y+0,R24
 013C 2227              clr R18
 013E 0027              clr R16
 0140 0E940000          xcall _LCD_write_string
 0144                   .dbline 60
 0144           L8:
 0144           L9:
 0144                   .dbline 62
 0144           ;                       }
 0144           ;         LCD_set_xy(0,1);
 0144 21E0              ldi R18,1
 0146 0027              clr R16
 0148 0E940000          xcall _LCD_set_xy
 014C                   .dbline 64
 014C           ;         //year
 014C           ;         s=read_data(0x8d);
 014C 0DE8              ldi R16,141
 014E 0E940000          xcall _read_data
 0152 A02E              mov R10,R16
 0154                   .dbline 65
 0154           ;         tl=s&0x0f;
 0154 4A2D              mov R20,R10
 0156 4F70              andi R20,15
 0158                   .dbline 66
 0158           ;         th=(s>>4);
 0158 6A2D              mov R22,R10
 015A 6295              swap R22
 015C 6F70              andi R22,#0x0F
 015E                   .dbline 68
 015E           ;         //LCD_write_char(0,th+48);
 015E           ;       LCD_write_char(0,tl+48);
 015E 242F              mov R18,R20
 0160 3327              clr R19
 0162 205D              subi R18,208  ; offset = 48
 0164 3F4F              sbci R19,255
 0166 0027              clr R16
 0168 1127              clr R17
 016A 0E940000          xcall _LCD_write_char
 016E                   .dbline 69
 016E           ;         LCD_write_char(0,'/');
 016E 2FE2              ldi R18,47
 0170 30E0              ldi R19,0
 0172 0027              clr R16
 0174 1127              clr R17
 0176 0E940000          xcall _LCD_write_char
 017A                   .dbline 71
 017A           ;         //month
 017A           ;         s=read_data(0x89);
 017A 09E8              ldi R16,137
 017C 0E940000          xcall _read_data

⌨️ 快捷键说明

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