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

📄 led.lis

📁 AVR基本外设测试程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 011A 80930200          sts L3,R24
 011E                   .dbline 99
 011E           ;               }
 011E           L21:
 011E           L20:
 011E           L18:
 011E           L16:
 011E                   .dbline 100
 011E           L13:
 011E                   .dbline -2
 011E           L1:
 011E 2990              ld R2,y+
 0120 2FBE              out 0x3f,R2
 0122 E991              ld R30,y+
 0124 9991              ld R25,y+
 0126 8991              ld R24,y+
 0128 3990              ld R3,y+
 012A 2990              ld R2,y+
 012C                   .dbline 0 ; func end
 012C 1895              reti
 012E                   .dbend
 012E                   .dbfunc e main _main fV
 012E           ;              i -> <dead>
 012E           ;              x -> R16
                        .even
 012E           _main::
 012E                   .dbline -1
 012E                   .dbline 186
 012E           ;       }
 012E           ; /*==========响铃2次函数结束============*/             
 012E           ;               
 012E           ;   }
 012E           ;   
 012E           ;  /*========HT1622驱动程序========*/
 012E           ; /* 
 012E           ;  void write_clk()     //允许写脉冲
 012E           ; {
 012E           ;     _NOP();  _NOP();  _NOP();  _NOP(); _NOP();  _NOP();
 012E           ;     HT_WR_ONE;
 012E           ;     _NOP();  _NOP();  _NOP();  _NOP(); _NOP();  _NOP();
 012E           ;     HT_WR_ZER;
 012E           ; } 
 012E           ; 
 012E           ; void send_bit(unsigned char  op_code,unsigned char len)       
 012E           ;       //从高位的位开始送
 012E           ; {
 012E           ; 
 012E           ;     while(len--)
 012E           ;     {   
 012E           ;           if(op_code&0x80==0x80)
 012E           ;               {
 012E           ;                  HT_DT_ONE;
 012E           ;               }
 012E           ;               else
 012E           ;               {
 012E           ;                  HT_DT_ZER;
 012E           ;               }
 012E           ;         write_clk();
 012E           ;         op_code = op_code<<1;
 012E           ;     }
 012E           ; }
 012E           ; 
 012E           ; void send_command(unsigned char command)              //送一个命令
 012E           ; {
 012E           ;     HT_CS_ZER;
 012E           ;     send_bit(0x80,3);
 012E           ;     send_bit(command,8);
 012E           ;     write_clk();
 012E           ;     HT_CS_ONE;
 012E           ; }
 012E           ; 
 012E           ; void send_all_char()  //开始送数据,一次全部送完
 012E           ; {
 012E           ;       unsigned char  x,y;
 012E           ;       unsigned char c;
 012E           ; 
 012E           ;         HT_CS_ZER;
 012E           ;       send_bit(0xa0,3);
 012E           ;       _NOP(); 
 012E           ;       send_bit(0,6);          //从第0个地址开始送数据
 012E           ;       for(x=0;x!=23;x++)
 012E           ;       {
 012E           ;               c=LCD[x];
 012E           ;               for(y=0;y!=8;y++)
 012E           ;               {
 012E           ;                               if(c&0x01==1)
 012E           ;                               {
 012E           ;                          HT_DT_ONE;
 012E           ;                       }  
 012E           ;                               else
 012E           ;                               {  
 012E           ;                                  HT_DT_ZER;
 012E           ;                               }
 012E           ;                               write_clk();
 012E           ;                       c=c>>1;
 012E           ;               }
 012E           ;       }
 012E           ;       HT_CS_ONE;
 012E           ; }
 012E           ; 
 012E           ; void init_1622()      //LCD初始化
 012E           ; {
 012E           ;     HT_CS_ONE;
 012E           ;     HT_WR_ONE;
 012E           ;     HT_DT_ONE;
 012E           ;     send_command(1);    //SYS EN
 012E           ;     send_command(3);    //LCD ON
 012E           ;     send_command(0x29);    // 1/3 偏压,4个公共端
 012E           ; }
 012E           ;   
 012E           ;  */ 
 012E           ;   
 012E           ; /*===============主函数部分===================*/ 
 012E           ; void main(void)
 012E           ; {  
 012E                   .dbline 199
 012E 0027              clr R16
 0130 09C0              rjmp L27
 0132           L24:
 0132                   .dbline 199
 0132 80E0              ldi R24,<_LCD
 0134 90E0              ldi R25,>_LCD
 0136 E02F              mov R30,R16
 0138 FF27              clr R31
 013A E80F              add R30,R24
 013C F91F              adc R31,R25
 013E 8FEF              ldi R24,255
 0140 8083              std z+0,R24
 0142           L25:
 0142                   .dbline 199
 0142 0395              inc R16
 0144           L27:
 0144                   .dbline 199
 0144           ;    unsigned int i;
 0144           ;    unsigned char x;
 0144           ;    /*===============初始化函数============*/
 0144           ;   // init_1622();
 0144           ;   /*
 0144           ;   ======================================
 0144           ;   采用定时器管理
 0144           ;   定时器0预分频系数为1024,定时时间为1.25MS
 0144           ;   初值为=256-1.25*14.7456*1000000/1024/1000=238
 0144           ;   首先要开启定时器0,
 0144           ;   =========================================
 0144           ;   */
 0144           ;   for(x=0;x<23;x++)  LCD[x]=0XFF;
 0144 0731              cpi R16,23
 0146 A8F3              brlo L24
 0148                   .dbline 201
 0148           ;     
 0148           ;   TCCR0=0X05;   //预分频系数为1024   0000 0101
 0148 85E0              ldi R24,5
 014A 83BF              out 0x33,R24
 014C                   .dbline 202
 014C           ;   TCNT0=0XEE;   //238              
 014C 8EEE              ldi R24,238
 014E 82BF              out 0x32,R24
 0150                   .dbline 203
 0150           ;   TIMSK|=0X01;  //使能T/C0中断,允许中断
 0150 89B7              in R24,0x39
 0152 8160              ori R24,1
 0154 89BF              out 0x39,R24
 0156                   .dbline 205
 0156           ; 
 0156           ;   DDRD&=0XF3;   //PIND2 PIND3设为输入
 0156 81B3              in R24,0x11
 0158 837F              andi R24,243
 015A 81BB              out 0x11,R24
 015C                   .dbline 206
 015C           ;   MCUCR=0X08; //00001000下降沿触发中断、GICR
 015C 88E0              ldi R24,8
 015E 85BF              out 0x35,R24
 0160                   .dbline 214
 0160           ;                 //ISC11,ISC10 INT1下降沿          
 0160           ;   
 0160           ;   /*========PB2输出PWM信号WGM[3;0]=1011
 0160           ;     ========加一计数中比较匹配时清零OC1B
 0160           ;       ========减一计数中比较匹配时置位
 0160           ;       ========CS12,CS11,CS10=010,表示8预分频计时器
 0160           ;   */
 0160           ;   DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
 0160 87B3              in R24,0x17
 0162 8E63              ori R24,62
 0164 87BB              out 0x17,R24
 0166                   .dbline 215
 0166           ;   TCCR1A=0X63;  //0110 0011
 0166 83E6              ldi R24,99
 0168 8FBD              out 0x2f,R24
 016A                   .dbline 216
 016A           ;   TCCR1B=0X12;  //0001 0010
 016A 82E1              ldi R24,18
 016C 8EBD              out 0x2e,R24
 016E                   .dbline 217
 016E           ;   OCR1A=0x61A7;    //设置TOP值为1249
 016E 87EA              ldi R24,24999
 0170 91E6              ldi R25,97
 0172 9BBD              out 0x2b,R25
 0174 8ABD              out 0x2a,R24
 0176                   .dbline 218
 0176           ;   OCR1B=2500;      //比较匹配值
 0176 84EC              ldi R24,2500
 0178 99E0              ldi R25,9
 017A 99BD              out 0x29,R25
 017C 88BD              out 0x28,R24
 017E                   .dbline 220
 017E           ;   
 017E           ;   SREG =0X80;      //使能总中断 
 017E 80E8              ldi R24,128
 0180 8FBF              out 0x3f,R24
 0182                   .dbline 221
 0182           ;   MBZ=0;               
 0182 2224              clr R2
 0184 20921900          sts _MBZ,R2
 0188 11C0              rjmp L29
 018A           L28:
 018A                   .dbline 223
 018A           ;   while(1)          
 018A           ;   {  
 018A                   .dbline 225
 018A           ;    // send_all_char();           
 018A           ;       DDRD|=BIT(PD7); //PD7设为输出
 018A 8F9A              sbi 0x11,7
 018C                   .dbline 226
 018C           ;       DDRD|=BIT(PD6);
 018C 8E9A              sbi 0x11,6
 018E                   .dbline 227
 018E           ;       if(MBZ==0)                                     
 018E 20901900          lds R2,_MBZ
 0192 2220              tst R2
 0194 09F4              brne L31
 0196                   .dbline 228
 0196           ;        {
 0196                   .dbline 229
 0196           ;        LED_LIANG;   //PD7为1,点亮LED指示灯
 0196 979A              sbi 0x12,7
 0198                   .dbline 230
 0198           ;        }
 0198           L31:
 0198                   .dbline 231
 0198           ;       if(MBZ==1)                                                 
 0198 80911900          lds R24,_MBZ
 019C 8130              cpi R24,1
 019E 31F4              brne L33
 01A0                   .dbline 232
 01A0           ;        {
 01A0                   .dbline 233
 01A0           ;          LED_MIE;
 01A0 9798              cbi 0x12,7
 01A2                   .dbline 234
 01A2           ;          a.BEEP1=1;
 01A2 80910000          lds R24,_a
 01A6 8160              ori R24,1
 01A8 80930000          sts _a,R24
 01AC                   .dbline 235
 01AC           ;        }
 01AC           L33:
 01AC                   .dbline 236
 01AC           L29:
 01AC                   .dbline 222
 01AC EECF              rjmp L28
 01AE           X4:
 01AE                   .dbline -2
 01AE           L23:
 01AE                   .dbline 0 ; func end
 01AE 0895              ret
 01B0                   .dbsym l i 1 i
 01B0                   .dbsym r x 16 c
 01B0                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\AVR-PRO\avr3\led.c
 0000           _a::
 0000                   .blkb 1
 0001                   .dbstruct 0 1 data
 0001                   .dbfield 0 BEEP1 F[0:1]
 0001                   .dbfield 0 BEEP2 F[1:1]
 0001                   .dbfield 0 BIT1 F[2:1]
 0001                   .dbfield 0 BIT2 F[3:1]
 0001                   .dbfield 0 BIT3 F[4:1]
 0001                   .dbfield 0 BIT4 F[5:1]
 0001                   .dbfield 0 BIT5 F[6:1]
 0001                   .dbfield 0 BIT6 F[7:1]
 0001                   .dbend
 0001                   .dbsym e a _a S[data]
 0001           _LCD::
 0001                   .blkb 23
 0018                   .dbsym e LCD _LCD A[23:23]c
 0018           _VARIA_BIT::
 0018                   .blkb 1
 0019                   .dbsym e VARIA_BIT _VARIA_BIT c
 0019           _MBZ::
 0019                   .blkb 1
 001A                   .dbsym e MBZ _MBZ c

⌨️ 快捷键说明

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