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

📄 irr.lis

📁 16个单片机c语言实验程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 02DA DF98              cbi 0x1b,7
 02DC                   .dbline 232
 02DC 08EC              ldi R16,200
 02DE 10E0              ldi R17,0
 02E0 8FDE              xcall _s_ms
 02E2                   .dbline 233
 02E2 4F5F              subi R20,255  ; offset = 1
 02E4 5F4F              sbci R21,255
 02E6                   .dbline 234
 02E6           L41:
 02E6                   .dbline 223
 02E6 AA94              dec R10
 02E8           L43:
 02E8                   .dbline 223
 02E8 AA20              tst R10
 02EA 51F7              brne L40
 02EC           X10:
 02EC                   .dbline -2
 02EC           L37:
 02EC                   .dbline 0 ; func end
 02EC 0C940000          xjmp pop_xgsetF03C
 02F0                   .dbsym r t 12 c
 02F0                   .dbsym r i 10 c
 02F0                   .dbsym r pBuffer 20 pc
 02F0                   .dbsym l num 8 i
 02F0                   .dbsym r col 10 c
 02F0                   .dbsym r row 22 c
 02F0                   .dbend
                        .area vector(rom, abs)
                        .org 4
 0004 0C947801          jmp _ext_int0_isr
                        .area text(rom, con, rel)
 02F0                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
                        .area data(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
 0000           _irr_b::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
 0001                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0001                   .dbsym e irr_b _irr_b c
 0001           _s_s::
 0001                   .blkb 1
                        .area idata
 0001 00                .byte 0
                        .area data(ram, con, rel)
 0002                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0002                   .dbsym e s_s _s_s c
 0002           _wb::
 0002                   .blkb 1
                        .area idata
 0002 00                .byte 0
                        .area data(ram, con, rel)
 0003                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0003                   .dbsym e wb _wb c
 0003           _a::
 0003                   .blkb 1
                        .area idata
 0003 00                .byte 0
                        .area data(ram, con, rel)
 0004                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0004                   .dbsym e a _a c
 0004           _ds::
 0004                   .blkb 1
                        .area idata
 0004 00                .byte 0
                        .area data(ram, con, rel)
 0005                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0005                   .dbsym e ds _ds c
 0005           _da::
 0005                   .blkb 4
                        .area idata
 0005 00000000          .word 0,0
                        .area data(ram, con, rel)
 0009                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 0009                   .dbsym e da _da L
                        .area text(rom, con, rel)
 02F0                   .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
 02F0                   .dbfunc e ext_int0_isr _ext_int0_isr fV
                        .even
 02F0           _ext_int0_isr::
 02F0 2A92              st -y,R2
 02F2 3A92              st -y,R3
 02F4 4A92              st -y,R4
 02F6 5A92              st -y,R5
 02F8 0A93              st -y,R16
 02FA 1A93              st -y,R17
 02FC 2A93              st -y,R18
 02FE 3A93              st -y,R19
 0300 8A93              st -y,R24
 0302 9A93              st -y,R25
 0304 AA93              st -y,R26
 0306 BA93              st -y,R27
 0308 2FB6              in R2,0x3f
 030A 2A92              st -y,R2
 030C                   .dbline -1
 030C                   .dbline 17
 030C           ; //Atmega16的红外遥控器接收试验
 030C           ; //使用1602液晶进行显示,
 030C           ; #include<iom16v.h>
 030C           ; #include"1602.h"
 030C           ; #pragma interrupt_handler ext_int0_isr:2  //指定外部中断函数
 030C           ; #define uchar unsigned char 
 030C           ; #define uint unsigned int 
 030C           ; 
 030C           ; uchar irr_b=0,s_s=0;
 030C           ; uchar wb=0,a=0,ds=0;
 030C           ; long da=0;
 030C           ; uchar d1,d2,d3,d4;
 030C           ; uchar ten_1,ten_2,ten_3,ten_4,i;
 030C           ; 
 030C           ; //中断接收
 030C           ; void ext_int0_isr(void)
 030C           ; {
 030C                   .dbline 18
 030C           ; if(irr_b==0)        //第一个中断
 030C 20900000          lds R2,_irr_b
 0310 2220              tst R2
 0312 31F4              brne L45
 0314           X11:
 0314                   .dbline 19
 0314           ;   {
 0314                   .dbline 20
 0314           ;   irr_b=1;          //状态为:开始接收
 0314 81E0              ldi R24,1
 0316 80930000          sts _irr_b,R24
 031A                   .dbline 21
 031A           ;   TCNT1L=0x00;      //定时器清零
 031A 2224              clr R2
 031C 2CBC              out 0x2c,R2
 031E                   .dbline 22
 031E           ;   }
 031E 71C0              xjmp L46
 0320           L45:
 0320                   .dbline 23
 0320           ; else if(irr_b==1)   //第二个以后的中断
 0320 80910000          lds R24,_irr_b
 0324 8130              cpi R24,1
 0326 09F0              breq X20
 0328 6CC0              xjmp L47
 032A           X20:
 032A           X12:
 032A                   .dbline 24
 032A           ;   {
 032A                   .dbline 25
 032A           ;    a=TCNT1L;        //读取定时器的值
 032A 2CB4              in R2,0x2c
 032C 20920300          sts _a,R2
 0330                   .dbline 27
 0330           ;    //判断是引导,还是数据
 0330           ;    if((170<a)&&(a<235))       //引导
 0330 422C              mov R4,R2
 0332 3324              clr R3
 0334 8AEA              ldi R24,170
 0336 90E0              ldi R25,0
 0338 8215              cp R24,R2
 033A 9305              cpc R25,R3
 033C A4F4              brge L49
 033E           X13:
 033E 822D              mov R24,R2
 0340 8B3E              cpi R24,235
 0342 88F4              brsh L49
 0344           X14:
 0344                   .dbline 28
 0344           ;      {
 0344                   .dbline 29
 0344           ;       wb=0;                   //数据计数清零     
 0344 2224              clr R2
 0346 20920200          sts _wb,R2
 034A                   .dbline 30
 034A           ;         da=0;                   //数据清零
 034A 80E0              ldi R24,0
 034C 90E0              ldi R25,0
 034E A0E0              ldi R26,0
 0350 B0E0              ldi R27,0
 0352 90930600          sts _da+1,R25
 0356 80930500          sts _da,R24
 035A B0930800          sts _da+2+1,R27
 035E A0930700          sts _da+2,R26
 0362                   .dbline 31
 0362           ;         TCNT1L=0x00;            //定时器清零 
 0362 2CBC              out 0x2c,R2
 0364                   .dbline 32
 0364           ;         }
 0364 4EC0              xjmp L50
 0366           L49:
 0366                   .dbline 33
 0366           ;    else if((8<a)&&(a<25))     //数据0
 0366 20900300          lds R2,_a
 036A 88E0              ldi R24,8
 036C 8215              cp R24,R2
 036E F8F4              brsh L51
 0370           X15:
 0370 822D              mov R24,R2
 0372 8931              cpi R24,25
 0374 E0F4              brsh L51
 0376           X16:
 0376                   .dbline 34
 0376           ;      { 
 0376                   .dbline 35
 0376           ;      wb++;
 0376 80910200          lds R24,_wb
 037A 8F5F              subi R24,255    ; addi 1
 037C 80930200          sts _wb,R24
 0380                   .dbline 36
 0380           ;      da=(da<<1);
 0380 40900700          lds R4,_da+2
 0384 50900800          lds R5,_da+2+1
 0388 20900500          lds R2,_da
 038C 30900600          lds R3,_da+1
 0390 220C              lsl R2
 0392 331C              rol R3
 0394 441C              rol R4
 0396 551C              rol R5
 0398 30920600          sts _da+1,R3
 039C 20920500          sts _da,R2
 03A0 50920800          sts _da+2+1,R5
 03A4 40920700          sts _da+2,R4
 03A8                   .dbline 37
 03A8           ;        TCNT1L=0x00;
 03A8 2224              clr R2
 03AA 2CBC              out 0x2c,R2
 03AC                   .dbline 38
 03AC           ;      }
 03AC 2AC0              xjmp L52
 03AE           L51:
 03AE                   .dbline 39
 03AE           ;    else if((25<a)&&(a<45))    //数据1
 03AE 00910300          lds R16,_a
 03B2 89E1              ldi R24,25
 03B4 8017              cp R24,R16
 03B6 28F5              brsh L53
 03B8           X17:
 03B8 0D32              cpi R16,45
 03BA 18F5              brsh L53
 03BC           X18:
 03BC                   .dbline 40
 03BC           ;      {
 03BC                   .dbline 41
 03BC           ;      wb++;
 03BC 80910200          lds R24,_wb
 03C0 8F5F              subi R24,255    ; addi 1
 03C2 80930200          sts _wb,R24
 03C6                   .dbline 42
 03C6           ;        da=(da<<1)+1;
 03C6 81E0              ldi R24,1
 03C8 90E0              ldi R25,0
 03CA A0E0              ldi R26,0
 03CC B0E0              ldi R27,0
 03CE 40900700          lds R4,_da+2
 03D2 50900800          lds R5,_da+2+1
 03D6 20900500          lds R2,_da
 03DA 30900600          lds R3,_da+1
 03DE 220C              lsl R2
 03E0 331C              rol R3
 03E2 441C              rol R4
 03E4 551C              rol R5
 03E6 280E              add R2,R24
 03E8 391E              adc R3,R25
 03EA 4A1E              adc R4,R26
 03EC 5B1E              adc R5,R27
 03EE 30920600          sts _da+1,R3
 03F2 20920500          sts _da,R2
 03F6 50920800          sts _da+2+1,R5
 03FA 40920700          sts _da+2,R4
 03FE                   .dbline 43
 03FE           ;        TCNT1L=0x00;
 03FE 2224              clr R2
 0400 2CBC              out 0x2c,R2
 0402                   .dbline 44
 0402           ;      }
 0402           L53:
 0402           L52:
 0402           L50:
 0402                   .dbline 45
 0402           ; }
 0402           L47:
 0402           L46:
 0402                   .dbline 46
 0402           ; if(wb==32)                    //数据长度够32位
 0402 80910200          lds R24,_wb
 0406 8032              cpi R24,32
 0408 41F4              brne L55
 040A           X19:
 040A                   .dbline 47
 040A           ;   {
 040A                   .dbline 48
 040A           ;   irr_b=0;                    //状态为停止接收
 040A 2224              clr R2
 040C 20920000          sts _irr_b,R2
 0410                   .dbline 49
 0410           ;   wb=0;                       //数据计数清零
 0410 20920200          sts _wb,R2
 0414                   .dbline 50
 0414           ;   s_s=1;                      //打开显示许可
 0414 81E0              ldi R24,1
 0416 80930100          sts _s_s,R24
 041A                   .dbline 51
 041A           ;   }
 041A           L55:
 041A                   .dbline -2
 041A           L44:
 041A                   .dbline 0 ; func end
 041A 2990              ld R2,y+
 041C 2FBE              out 0x3f,R2
 041E B991              ld R27,y+
 0420 A991              ld R26,y+
 0422 9991              ld R25,y+
 0424 8991              ld R24,y+
 0426 3991              ld R19,y+
 0428 2991              ld R18,y+
 042A 1991              ld R17,y+
 042C 0991              ld R16,y+
 042E 5990              ld R5,y+
 0430 4990              ld R4,y+
 0432 3990              ld R3,y+
 0434 2990              ld R2,y+
 0436 1895              reti
 0438                   .dbend
 0438                   .dbfunc e t1_init _t1_init fV
                        .even
 0438           _t1_init::
 0438                   .dbline -1
 0438                   .dbline 56
 0438           ; }
 0438           ; 
 0438           ; //定时器T1初始化
 0438           ; void t1_init()
 0438           ; {
 0438                   .dbline 57
 0438           ; TCCR1B=0x00;   //关闭定时器
 0438 2224              clr R2
 043A 2EBC              out 0x2e,R2
 043C                   .dbline 58
 043C           ; TCNT1H=0x00;   //定时器初值
 043C 2DBC              out 0x2d,R2
 043E                   .dbline 59
 043E           ; TCNT1L=0x00;
 043E 2CBC              out 0x2c,R2
 0440                   .dbline 60
 0440           ; TCCR1A=0x00;   //普通模式
 0440 2FBC              out 0x2f,R2
 0442                   .dbline 61
 0442           ; TCCR1B=0x05;   //1024分频
 0442 85E0              ldi R24,5
 0444 8EBD              out 0x2e,R24
 0446                   .dbline -2
 0446           L57:
 0446                   .dbline 0 ; func end
 0446 0895              ret
 0448                   .dbend
 0448                   .dbfunc e main _main fI
                        .even
 0448           _main::
 0448 2297              sbiw R28,2
 044A                   .dbline -1
 044A                   .dbline 66
 044A           ; }
 044A           ; 
 044A           ; //主函数
 044A           ; main()
 044A           ; {
 044A                   .dbline 68
 044A           ; //初始化端口
 044A           ; DDRA=0xff;
 044A 8FEF              ldi R24,255
 044C 8ABB              out 0x1a,R24
 044E                   .dbline 69
 044E           ; PORTA=0x00;
 044E 2224              clr R2
 0450 2BBA              out 0x1b,R2
 0452                   .dbline 70
 0452           ; DDRB=0xff;
 0452 87BB              out 0x17,R24
 0454                   .dbline 71
 0454           ; DDRD=0x00;         //中断输入
 0454 21BA              out 0x11,R2
 0456                   .dbline 72
 0456           ; PORTD=0xff;        //内部上拉
 0456 82BB              out 0x12,R24
 0458                   .dbline 74
 0458           ; 
 0458           ; t1_init();         //定时器t1初始化
 0458 EFDF              xcall _t1_init
 045A                   .dbline 76
 045A           ; 
 045A           ; MCUCR = 0x02;      //下降沿中断
 045A 82E0              ldi R24,2
 045C 85BF              out 0x35,R24
 045E                   .dbline 77
 045E           ; GICR  = 0x40;      //开外部中断int_0
 045E 80E4              ldi R24,64
 0460 8BBF              out 0x3b,R24
 0462                   .dbline 78
 0462           ; TIMSK = 0x00;      
 0462 2224              clr R2
 0464 29BE              out 0x39,R2
 0466                   .dbline 79
 0466           ; SREG=0x80;         //开全局中断
 0466 80E8              ldi R24,128
 0468 8FBF              out 0x3f,R24
 046A                   .dbline 80
 046A           ; s_s=1;             //开机进行一次显示

⌨️ 快捷键说明

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