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

📄 irr.s

📁 16个单片机c语言实验程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 231
	cbi 0x1b,7
	.dbline 232
	ldi R16,200
	ldi R17,0
	xcall _s_ms
	.dbline 233
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 234
L41:
	.dbline 223
	dec R10
L43:
	.dbline 223
	tst R10
	brne L40
X10:
	.dbline -2
L37:
	.dbline 0 ; func end
	xjmp pop_xgsetF03C
	.dbsym r t 12 c
	.dbsym r i 10 c
	.dbsym r pBuffer 20 pc
	.dbsym l num 8 i
	.dbsym r col 10 c
	.dbsym r row 22 c
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _ext_int0_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
_irr_b::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e irr_b _irr_b c
_s_s::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e s_s _s_s c
_wb::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e wb _wb c
_a::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e a _a c
_ds::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e ds _ds c
_da::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbsym e da _da L
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
	.dbfunc e ext_int0_isr _ext_int0_isr fV
	.even
_ext_int0_isr::
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 17
; //Atmega16的红外遥控器接收试验
; //使用1602液晶进行显示,
; #include<iom16v.h>
; #include"1602.h"
; #pragma interrupt_handler ext_int0_isr:2  //指定外部中断函数
; #define uchar unsigned char 
; #define uint unsigned int 
; 
; uchar irr_b=0,s_s=0;
; uchar wb=0,a=0,ds=0;
; long da=0;
; uchar d1,d2,d3,d4;
; uchar ten_1,ten_2,ten_3,ten_4,i;
; 
; //中断接收
; void ext_int0_isr(void)
; {
	.dbline 18
; if(irr_b==0)        //第一个中断
	lds R2,_irr_b
	tst R2
	brne L45
X11:
	.dbline 19
;   {
	.dbline 20
;   irr_b=1;          //状态为:开始接收
	ldi R24,1
	sts _irr_b,R24
	.dbline 21
;   TCNT1L=0x00;      //定时器清零
	clr R2
	out 0x2c,R2
	.dbline 22
;   }
	xjmp L46
L45:
	.dbline 23
; else if(irr_b==1)   //第二个以后的中断
	lds R24,_irr_b
	cpi R24,1
	breq X20
	xjmp L47
X20:
X12:
	.dbline 24
;   {
	.dbline 25
;    a=TCNT1L;        //读取定时器的值
	in R2,0x2c
	sts _a,R2
	.dbline 27
;    //判断是引导,还是数据
;    if((170<a)&&(a<235))       //引导
	mov R4,R2
	clr R3
	ldi R24,170
	ldi R25,0
	cp R24,R2
	cpc R25,R3
	brge L49
X13:
	mov R24,R2
	cpi R24,235
	brsh L49
X14:
	.dbline 28
;      {
	.dbline 29
;       wb=0;                   //数据计数清零     
	clr R2
	sts _wb,R2
	.dbline 30
; 	  da=0;                   //数据清零
	ldi R24,0
	ldi R25,0
	ldi R26,0
	ldi R27,0
	sts _da+1,R25
	sts _da,R24
	sts _da+2+1,R27
	sts _da+2,R26
	.dbline 31
; 	  TCNT1L=0x00;            //定时器清零 
	out 0x2c,R2
	.dbline 32
; 	  }
	xjmp L50
L49:
	.dbline 33
;    else if((8<a)&&(a<25))     //数据0
	lds R2,_a
	ldi R24,8
	cp R24,R2
	brsh L51
X15:
	mov R24,R2
	cpi R24,25
	brsh L51
X16:
	.dbline 34
;      { 
	.dbline 35
;      wb++;
	lds R24,_wb
	subi R24,255    ; addi 1
	sts _wb,R24
	.dbline 36
;      da=(da<<1);
	lds R4,_da+2
	lds R5,_da+2+1
	lds R2,_da
	lds R3,_da+1
	lsl R2
	rol R3
	rol R4
	rol R5
	sts _da+1,R3
	sts _da,R2
	sts _da+2+1,R5
	sts _da+2,R4
	.dbline 37
; 	 TCNT1L=0x00;
	clr R2
	out 0x2c,R2
	.dbline 38
;      }
	xjmp L52
L51:
	.dbline 39
;    else if((25<a)&&(a<45))    //数据1
	lds R16,_a
	ldi R24,25
	cp R24,R16
	brsh L53
X17:
	cpi R16,45
	brsh L53
X18:
	.dbline 40
;      {
	.dbline 41
;      wb++;
	lds R24,_wb
	subi R24,255    ; addi 1
	sts _wb,R24
	.dbline 42
; 	 da=(da<<1)+1;
	ldi R24,1
	ldi R25,0
	ldi R26,0
	ldi R27,0
	lds R4,_da+2
	lds R5,_da+2+1
	lds R2,_da
	lds R3,_da+1
	lsl R2
	rol R3
	rol R4
	rol R5
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts _da+1,R3
	sts _da,R2
	sts _da+2+1,R5
	sts _da+2,R4
	.dbline 43
; 	 TCNT1L=0x00;
	clr R2
	out 0x2c,R2
	.dbline 44
;      }
L53:
L52:
L50:
	.dbline 45
; }
L47:
L46:
	.dbline 46
; if(wb==32)                    //数据长度够32位
	lds R24,_wb
	cpi R24,32
	brne L55
X19:
	.dbline 47
;   {
	.dbline 48
;   irr_b=0;                    //状态为停止接收
	clr R2
	sts _irr_b,R2
	.dbline 49
;   wb=0;                       //数据计数清零
	sts _wb,R2
	.dbline 50
;   s_s=1;                      //打开显示许可
	ldi R24,1
	sts _s_s,R24
	.dbline 51
;   }
L55:
	.dbline -2
L44:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e t1_init _t1_init fV
	.even
_t1_init::
	.dbline -1
	.dbline 56
; }
; 
; //定时器T1初始化
; void t1_init()
; {
	.dbline 57
; TCCR1B=0x00;   //关闭定时器
	clr R2
	out 0x2e,R2
	.dbline 58
; TCNT1H=0x00;   //定时器初值
	out 0x2d,R2
	.dbline 59
; TCNT1L=0x00;
	out 0x2c,R2
	.dbline 60
; TCCR1A=0x00;   //普通模式
	out 0x2f,R2
	.dbline 61
; TCCR1B=0x05;   //1024分频
	ldi R24,5
	out 0x2e,R24
	.dbline -2
L57:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fI
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 66
; }
; 
; //主函数
; main()
; {
	.dbline 68
; //初始化端口
; DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 69
; PORTA=0x00;
	clr R2
	out 0x1b,R2
	.dbline 70
; DDRB=0xff;
	out 0x17,R24
	.dbline 71
; DDRD=0x00;         //中断输入
	out 0x11,R2
	.dbline 72
; PORTD=0xff;        //内部上拉
	out 0x12,R24
	.dbline 74
; 
; t1_init();         //定时器t1初始化
	xcall _t1_init
	.dbline 76
; 
; MCUCR = 0x02;      //下降沿中断
	ldi R24,2
	out 0x35,R24
	.dbline 77
; GICR  = 0x40;      //开外部中断int_0
	ldi R24,64
	out 0x3b,R24
	.dbline 78
; TIMSK = 0x00;      
	clr R2
	out 0x39,R2
	.dbline 79
; SREG=0x80;         //开全局中断
	ldi R24,128
	out 0x3f,R24
	.dbline 80
; s_s=1;             //开机进行一次显示
	ldi R24,1
	sts _s_s,R24
	xjmp L60
L59:
	.dbline 82
; while(1)
;     {
	.dbline 83
; 	ds=TCNT1L;
	in R2,0x2c
	sts _ds,R2
	.dbline 84
; 	if(ds>250)     //定时器超时,接收复位
	ldi R24,250
	cp R24,R2
	brsh L62
X21:
	.dbline 85
; 	  {
	.dbline 86
; 	  TCNT1L=0;
	clr R2
	out 0x2c,R2
	.dbline 87
; 	  irr_b=0;
	sts _irr_b,R2
	.dbline 88
; 	  da=0;
	ldi R24,0
	ldi R25,0
	ldi R26,0
	ldi R27,0
	sts _da+1,R25
	sts _da,R24
	sts _da+2+1,R27
	sts _da+2,R26
	.dbline 89
;       wb=0; 
	sts _wb,R2
	.dbline 90
;       s_s=0;
	sts _s_s,R2
	.dbline 91
; 	  }
L62:
	.dbline 92
; 	if(s_s==1)     //显示开关打开,开始显示
	lds R24,_s_s
	cpi R24,1
	breq X24
	xjmp L64
X24:
X22:
	.dbline 93
; 	  {
	.dbline 94
; 	  SREG=0x00;     //关闭全局中断
	clr R2
	out 0x3f,R2
	.dbline 95
;       LcdInit();     //1602初始化
	xcall _LcdInit
	.dbline 97
; 	  //显示设备码
; 	  d1=da>>24;
	ldi R24,24
	ldi R25,0
	lds R18,_da+2
	lds R19,_da+2+1
	lds R16,_da
	lds R17,_da+1
	st -y,R24
	xcall asr32
	sts _d1,R16
	.dbline 98
; 	  ten_1=d1/100;
	ldi R17,100
	xcall div8u
	sts _ten_1,R16
	.dbline 99
; 	  ten_2=(d1-(100*ten_1))/10;
	mov R2,R16
	ldi R24,100
	mul R24,R2
	lds R16,_d1
	sub R16,R0
	ldi R17,10
	xcall div8u
	sts _ten_2,R16
	.dbline 100
; 	  ten_3=d1-(100*ten_1)-ten_2*10;
	lds R2,_ten_1
	ldi R24,100
	mul R24,R2
	lds R2,_d1
	sub R2,R0
	mov R3,R16
	ldi R24,10
	mul R24,R3
	sub R2,R0
	sts _ten_3,R2
	.dbline 101
; 	  WriteNum(1,0,ten_1);
	lds R2,_ten_1
	clr R3
	std y+1,R3
	std y+0,R2
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 102
; 	  WriteNum(1,1,ten_2);
	lds R2,_ten_2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,1
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 103
; 	  WriteNum(1,2,ten_3);
	lds R2,_ten_3
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,2
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 105
; 	  //显示设备码反码
; 	  d1=da>>16;
	lds R2,_da+2
	lds R3,_da+3
	sts _d1,R2
	.dbline 106
; 	  ten_1=d1/100;
	ldi R17,100
	mov R16,R2
	xcall div8u
	sts _ten_1,R16
	.dbline 107
; 	  ten_2=(d1-(100*ten_1))/10;
	mov R2,R16
	ldi R24,100
	mul R24,R2
	lds R16,_d1
	sub R16,R0
	ldi R17,10
	xcall div8u
	sts _ten_2,R16
	.dbline 108
; 	  ten_3=d1-(100*ten_1)-ten_2*10;
	lds R2,_ten_1
	ldi R24,100
	mul R24,R2
	lds R2,_d1
	sub R2,R0
	mov R3,R16
	ldi R24,10
	mul R24,R3
	sub R2,R0
	sts _ten_3,R2
	.dbline 109
; 	  WriteNum(1,4,ten_1);
	lds R2,_ten_1
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,4
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 110
;   	  WriteNum(1,5,ten_2);
	lds R2,_ten_2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,5
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 111
; 	  WriteNum(1,6,ten_3);
	lds R2,_ten_3
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,6
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 113
; 	  //显示键码
; 	  d1=da>>8;
	ldi R24,8
	ldi R25,0
	lds R18,_da+2
	lds R19,_da+2+1
	lds R16,_da
	lds R17,_da+1
	st -y,R24
	xcall asr32
	sts _d1,R16
	.dbline 114
; 	  ten_1=d1/100;
	ldi R17,100
	xcall div8u
	sts _ten_1,R16
	.dbline 115
; 	  ten_2=(d1-(100*ten_1))/10;
	mov R2,R16
	ldi R24,100
	mul R24,R2
	lds R16,_d1
	sub R16,R0
	ldi R17,10
	xcall div8u
	sts _ten_2,R16
	.dbline 116
; 	  ten_3=d1-(100*ten_1)-ten_2*10;
	lds R2,_ten_1
	ldi R24,100
	mul R24,R2
	lds R2,_d1
	sub R2,R0
	mov R3,R16
	ldi R24,10
	mul R24,R3
	sub R2,R0
	sts _ten_3,R2
	.dbline 117
; 	  WriteNum(1,8,ten_1);
	lds R2,_ten_1
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,8
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 118
; 	  WriteNum(1,9,ten_2);
	lds R2,_ten_2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,9
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 119
; 	  WriteNum(1,10,ten_3);
	lds R2,_ten_3
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,10
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 121
; 	  //显示键码反码
; 	  d1=da;
	lds R2,_da
	lds R3,_da+1
	sts _d1,R2
	.dbline 122
; 	  ten_1=d1/100;
	ldi R17,100
	mov R16,R2
	xcall div8u
	sts _ten_1,R16
	.dbline 123
; 	  ten_2=(d1-(100*ten_1))/10;
	mov R2,R16
	ldi R24,100
	mul R24,R2
	lds R16,_d1
	sub R16,R0
	ldi R17,10
	xcall div8u
	sts _ten_2,R16
	.dbline 124
; 	  ten_3=d1-(100*ten_1)-ten_2*10;
	lds R2,_ten_1
	ldi R24,100
	mul R24,R2
	lds R2,_d1
	sub R2,R0
	mov R3,R16
	ldi R24,10
	mul R24,R3
	sub R2,R0
	sts _ten_3,R2
	.dbline 125
; 	  WriteNum(1,12,ten_1);
	lds R2,_ten_1
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,12
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 126
; 	  WriteNum(1,13,ten_2);
	lds R2,_ten_2
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,13
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 127
; 	  WriteNum(1,14,ten_3);
	lds R2,_ten_3
	clr R3
	std y+1,R3
	std y+0,R2
	ldi R18,14
	ldi R19,0
	ldi R16,1
	ldi R17,0
	xcall _WriteNum
	.dbline 129
; 	  //复位D端口
; 	  DDRD=0x00;    //中断输入
	clr R2
	out 0x11,R2
	.dbline 130
;       PORTD=0xff;   //内部上拉
	ldi R24,255
	out 0x12,R24
	.dbline 131
; 	  s_s=0;        //关闭显示开关
	sts _s_s,R2
	.dbline 132
; 	  SREG=0x80;    //开全局中断
	ldi R24,128
	out 0x3f,R24
	.dbline 133
;    	  }
L64:
	.dbline 134
; 	}
L60:
	.dbline 81
	xjmp L59
X23:
	.dbline -2
L58:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
_i::
	.blkb 1
	.dbsym e i _i c
_ten_4::
	.blkb 1
	.dbsym e ten_4 _ten_4 c
_ten_3::
	.blkb 1
	.dbsym e ten_3 _ten_3 c
_ten_2::
	.blkb 1
	.dbsym e ten_2 _ten_2 c
_ten_1::
	.blkb 1
	.dbsym e ten_1 _ten_1 c
_d4::
	.blkb 1
	.dbsym e d4 _d4 c
_d3::
	.blkb 1
	.dbsym e d3 _d3 c
_d2::
	.blkb 1
	.dbsym e d2 _d2 c
_d1::
	.blkb 1
	.dbsym e d1 _d1 c
; }

⌨️ 快捷键说明

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