?? hongwai.s
字號:
.module hongwai.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\實驗板紅外avr解碼\hongwai.c
.dbfunc e delay_nus _delay_nus fV
; i -> R20,R21
; n -> R16,R17
.even
_delay_nus::
st -y,R20
st -y,R21
.dbline -1
.dbline 12
; //ICC-AVR application builder : 2008-8-7 8:30:21
; // Target : M8515
; // Crystal: 4.0000Mhz
; #include <iom8515v.h>//和單片機類型相對應的頭文件,選擇Atmega8515做實驗;
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; #define DQ PD2
; #define HW (PIND&(1<<DQ)) //數據的狀態
; unsigned char IRCode[3],IRCON,flag;
; void delay_nus(unsigned int n)//n微秒延時函數
; {
.dbline 14
; unsigned int i;
; for (i=0;i<n;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 15
; {
.dbline 16
; asm("nop");
nop
.dbline 17
; }
L3:
.dbline 14
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 14
cp R20,R16
cpc R21,R17
brlo L2
X0:
.dbline -2
L1:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r n 16 i
.dbend
.dbfunc e delay_nms _delay_nms fV
; i -> R20,R21
; n -> R10,R11
.even
_delay_nms::
rcall push_xgset300C
movw R10,R16
.dbline -1
.dbline 20
; }
; void delay_nms(unsigned int n)//n毫秒延時函數
; {
.dbline 22
; unsigned int i;
; for (i=0;i<n;i++) //執行n次1毫秒延時
clr R20
clr R21
rjmp L10
L7:
.dbline 23
; delay_nus(10);
ldi R16,10
ldi R17,0
rcall _delay_nus
L8:
.dbline 22
subi R20,255 ; offset = 1
sbci R21,255
L10:
.dbline 22
cp R20,R10
cpc R21,R11
brlo L7
X1:
.dbline -2
L6:
.dbline 0 ; func end
rjmp pop_xgset300C
.dbsym r i 20 i
.dbsym r n 10 i
.dbend
.dbfunc e uart0_init _uart0_init fV
.even
_uart0_init::
.dbline -1
.dbline 27
; }
; /************************* UART 發送數據函數*********************************************************/
; void uart0_init(void)
; {
.dbline 28
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 29
; UCSRA = 0x00;
out 0xb,R2
.dbline 30
; UCSRC = BIT(URSEL) | 0x26;
ldi R24,166
out 0x20,R24
.dbline 31
; UBRRL = 0x33; //set baud rate lo
ldi R24,51
out 0x9,R24
.dbline 32
; UBRRH = 0x00; //set baud rate hi
out 0x20,R2
.dbline 33
; UCSRB = 0x18;
ldi R24,24
out 0xa,R24
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e sendchar _sendchar fV
; num -> R16
.even
_sendchar::
.dbline -1
.dbline 36
; }
; void sendchar(uchar num)
; {
.dbline 37
; UDR=num;
out 0xc,R16
L13:
.dbline 38
; while(!(UCSRA&(1<<TXC)));
L14:
.dbline 38
sbis 0xb,6
rjmp L13
X2:
.dbline 39
; UCSRA |= (1<<TXC);
sbi 0xb,6
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r num 16 c
.dbend
.dbfunc e panduan _panduan fV
.even
_panduan::
.dbline -1
.dbline 43
; }
;
; void panduan(void)
; {
.dbline 44
; IRCode[IRCON]<<=1; //每讀一次放入變量中的二進制的一個位,每次左移一位
ldi R24,<_IRCode
ldi R25,>_IRCode
lds R2,_IRCON
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R2,z+0
lsl R2
std z+0,R2
.dbline 45
; if(!HW) delay_nms(42); //延時1107us 44
sbic 0x10,2
rjmp L17
X3:
.dbline 45
ldi R16,42
ldi R17,0
rcall _delay_nms
rjmp L18
L17:
.dbline 47
; else
; {
.dbline 48
; IRCode[IRCON]|=0x01; //左移后最后一位寫入 1
ldi R24,<_IRCode
ldi R25,>_IRCode
lds R2,_IRCON
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
ori R24,1
std z+0,R24
.dbline 49
; delay_nms(89); //延時2207us 88
ldi R16,89
ldi R17,0
rcall _delay_nms
.dbline 50
; }
L18:
.dbline 51
; flag++;
lds R24,_flag
subi R24,255 ; addi 1
sts _flag,R24
.dbline 52
; if(flag==8)
cpi R24,8
brne L19
X4:
.dbline 53
; {
.dbline 54
; flag=0; //8為填滿一個數組,計數清零
clr R2
sts _flag,R2
.dbline 55
; IRCON++; //填滿一個字節,指向下一個變量
lds R24,_IRCON
subi R24,255 ; addi 1
sts _IRCON,R24
.dbline 56
; if(IRCON==4) IRCON=0;
cpi R24,4
brne L21
X5:
.dbline 56
sts _IRCON,R2
L21:
.dbline 57
; }
L19:
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 2
rjmp _int0_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\實驗板紅外avr解碼\hongwai.c
.dbfunc e int0_isr _int0_isr fV
; i -> R20
.even
_int0_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
st -y,R20
.dbline -1
.dbline 62
; }
; /*****************************外部中斷服務函數*****************************************/
; #pragma interrupt_handler int0_isr:iv_INT0
; void int0_isr(void)
; {
.dbline 64
; uchar i;
; GICR = 0x00; //禁止外部中斷
clr R2
out 0x3b,R2
.dbline 65
; delay_nms(616); //延時15400us 616
ldi R16,616
ldi R17,2
rcall _delay_nms
.dbline 66
; for(i=0;i<32;i++)
clr R20
rjmp L27
L24:
.dbline 67
; {
.dbline 68
; panduan();
rcall _panduan
.dbline 69
; }
L25:
.dbline 66
inc R20
L27:
.dbline 66
cpi R20,32
brlo L24
X6:
.dbline 71
;
; uart0_init();
rcall _uart0_init
.dbline 72
; for(i=0;i<4;i++)
clr R20
rjmp L31
L28:
.dbline 73
; {
.dbline 74
; delay_nms(5000);
ldi R16,5000
ldi R17,19
rcall _delay_nms
.dbline 76
; // PORTB=IRCode[i];
; sendchar(IRCode[i]);
ldi R24,<_IRCode
ldi R25,>_IRCode
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _sendchar
.dbline 77
; }
L29:
.dbline 72
inc R20
L31:
.dbline 72
cpi R20,4
brlo L28
X7:
.dbline 78
; GICR = 0x40;
ldi R24,64
out 0x3b,R24
.dbline -2
L23:
.dbline 0 ; func end
ld R20,y+
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
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 R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbsym r i 20 c
.dbend
.dbfunc e init_devices_int0 _init_devices_int0 fV
.even
_init_devices_int0::
.dbline -1
.dbline 83
; }
;
; /*****************外部中斷設置***********************************/
; void init_devices_int0(void)
; {
.dbline 84
; CLI(); //disable all interrupts
cli
.dbline 85
; MCUCR = 0x02; //下降沿觸發方式
ldi R24,2
out 0x35,R24
.dbline 86
; EMCUCR = 0x00;
clr R2
out 0x36,R2
.dbline 87
; GICR = 0x40; //外部中斷請求 0 使能
ldi R24,64
out 0x3b,R24
.dbline 88
; SEI(); //re-enable interrupts
sei
.dbline -2
L32:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 92
; }
;
; void main(void)//主函數
; {
.dbline 93
; DDRB=0XFF;
ldi R24,255
out 0x17,R24
.dbline 94
; PORTB=0XFF;
out 0x18,R24
.dbline 95
; DDRD&=~BIT(0);
cbi 0x11,0
.dbline 96
; DDRD|=BIT(1);
sbi 0x11,1
.dbline 97
; DDRD&=~BIT(2);//設置PD2為輸入口
cbi 0x11,2
.dbline 98
; init_devices_int0(); //外部中斷初始化并開外部中斷
rcall _init_devices_int0
L34:
.dbline 99
; while(1);
L35:
.dbline 99
rjmp L34
X8:
.dbline -2
L33:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\實驗板紅外avr解碼\hongwai.c
_flag::
.blkb 1
.dbsym e flag _flag c
_IRCON::
.blkb 1
.dbsym e IRCON _IRCON c
_IRCode::
.blkb 3
.dbsym e IRCode _IRCode A[3:3]c
; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -