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

📄 int0+1.s

📁 详细介绍M8两版间通讯
💻 S
字号:
	.module INT0+1.c
	.area text(rom, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
	.dbfunc e delay_ms _delay_ms fV
;      loopcount -> R20
;              i -> R10
;             ms -> R22,R23
	.even
_delay_ms::
	rcall push_gset3
	movw R22,R16
	.dbline -1
	.dbline 6
; /*INT0、INT1使用中断方式,一个中断处理函数 实现对INT0/INT1按键的处理*/
; #include <iom8v.h>
; #include <macros.h>
; extern void uart_init(void);
; void delay_ms(unsigned int ms)
;  {
	.dbline 8
; 	unsigned char i,loopcount;
; 	ms=4*ms+1;
	ldi R16,4
	ldi R17,0
	movw R18,R22
	rcall empy16s
	movw R22,R16
	subi R22,255  ; offset = 1
	sbci R23,255
	.dbline 9
; 	for(loopcount=0;loopcount<ms;loopcount++)//外循环
	clr R20
	rjmp L5
L2:
	.dbline 10
; 	 {
	.dbline 11
	clr R10
	rjmp L9
L6:
	.dbline 11
L7:
	.dbline 11
	inc R10
L9:
	.dbline 11
	ldi R24,251
	cp R24,R10
	brsh L6
	.dbline 13
L3:
	.dbline 9
	inc R20
L5:
	.dbline 9
	mov R2,R20
	clr R3
	cp R2,R22
	cpc R3,R23
	brlo L2
	.dbline -2
L1:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r loopcount 20 c
	.dbsym r i 10 c
	.dbsym r ms 22 i
	.dbend
	.dbfunc e int_init _int_init fV
	.even
_int_init::
	.dbline -1
	.dbline 16
; 		for(i=0;i<=251;i++);
; 		//内循环
; 	 }
;  }
; void int_init(void)
; {GICR  = 0xC0;}
	.dbline 16
	ldi R24,192
	out 0x3b,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int_isr
	.area text(rom, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
	.area vector(rom, abs)
	.org 4
	rjmp _int_isr
	.area text(rom, con, rel)
	.dbfile G:\Mega8程序\TCXO评估板\Main\INT0+1.c
	.dbfunc e int_isr _int_isr fV
;      loopcount -> <dead>
;              i -> R20
	.even
_int_isr::
	rcall push_lset
	rcall push_gset1
	.dbline -1
	.dbline 20
; //初始化int0,int1中断使能
; #pragma interrupt_handler int_isr:iv_INT0 int_isr:iv_INT1
; void int_isr(void)
;  {
	.dbline 23
; 	unsigned char i;
; 	unsigned char loopcount;
; 	delay_ms(50);//延时10ms后检测按键是否有效,进行软防抖
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 27
; 	/*for (loopcount=0;loopcount<41;loopcount++)
; 		{for(i=0;i<251;i++);}
; 	//不使用延时函数而直接使用循环进行延时*/
; 	i=PIND&0x0c;//检测键盘是否仍按下
	in R20,0x10
	andi R20,12
	.dbline 28
; 	if(i==0x0c) return;//按键误触发
	cpi R20,12
	brne L12
	.dbline 28
	rjmp L11
L12:
	.dbline 30
; 	else
; 	 {
	.dbline 31
; 		if(i==0x08)//INT0键按下
	cpi R20,8
	brne L14
	.dbline 32
; 		 {
	.dbline 33
; 			if (OCR1A<3890) OCR1A+=205;//递增
	in R24,0x2a
	in R25,0x2b
	cpi R24,50
	ldi R30,15
	cpc R25,R30
	brsh L16
	.dbline 33
	in R24,0x2a
	in R25,0x2b
	subi R24,51  ; offset = 205
	sbci R25,255
	out 0x2b,R25
	out 0x2a,R24
	rjmp L15
L16:
	.dbline 34
; 			else OCR1A=0x0fff;
	ldi R24,4095
	ldi R25,15
	out 0x2b,R25
	out 0x2a,R24
	.dbline 36
; 			//12位满幅值,防止出现数据变为负向数值
; 		 }
	rjmp L15
L14:
	.dbline 37
; 		else if(i==0x04)//INT1键按下
	cpi R20,4
	brne L18
	.dbline 38
; 		 {
	.dbline 39
; 			if (OCR1A>205) OCR1A-=205;//递减
	ldi R24,205
	ldi R25,0
	in R2,0x2a
	in R3,0x2b
	cp R24,R2
	cpc R25,R3
	brsh L20
	.dbline 39
	in R24,0x2a
	in R25,0x2b
	subi R24,205
	sbci R25,0
	out 0x2b,R25
	out 0x2a,R24
	rjmp L19
L20:
	.dbline 40
; 			else OCR1A=0;
	clr R2
	clr R3
	out 0x2b,R3
	out 0x2a,R2
	.dbline 41
; 		 }
	rjmp L19
L18:
	.dbline 42
; 		else if(i==0x00) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
	tst R20
	brne L22
	.dbline 42
	ldi R24,152
	out 0xa,R24
L22:
L19:
L15:
	.dbline 44
; 		//两键同时按下,重新切换到USART中,允许接收中断、发送和接收
; 	 }
	.dbline 45
; 	GICR  = 0x00;
	clr R2
	out 0x3b,R2
	.dbline 47
; 	//int0,int1禁止使能
; 	SEI();
	sei
L24:
	.dbline 48
L25:
	.dbline 48
; 	while ((PIND&0x0c)!=0x0c);
	in R24,0x10
	andi R24,12
	cpi R24,12
	brne L24
	.dbline 50
; 	//检查按键释放
; 	GICR  = 0xC0;
	ldi R24,192
	out 0x3b,R24
	.dbline -2
L11:
	rcall pop_gset1
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym l loopcount 1 c
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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