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

📄 main.asm

📁 ATMEGA16芯片+HS0038B红外接收头组成的遥控器测试程序
💻 ASM
字号:
;------------------------------------------------------------------------------------------------
;控制器简介:
;MPU:		ATmega16
;FLASH:		16K*8位 / 8K*16位(0000H--01FFFH)    数据时为:0000H--1FFFH
;RAM:       	1120*8位(0000H--045FH)
;		0000H--001FH  32个快速寄存器
;               0020H--005FH  64个I/O寄存器
;               0060H--045FH  内部RAM(1FFH(1024)个)
;EEPROM:    	512*8位 (000H--1FFH)
;
;2.4--5.5v: 0--8MHz	选择:7.3728MHZ外部晶振
;------------------------------------------------------------------------------------------------
		.include 	"m16def.inc"		;ATmega16 特殊寄存器定义文件


		.include	"Define_RAM.def"	;用户寄存器定义文件
		.include 	"Define_constant.def"	;常量定义文件


;--------------------------中断向量地址转移----------------------------------------------------------
			.ORG	$0000
		JMP	Reset    		;Reset 复位

			.ORG	INT0addr
		JMP	Int_External_INT0
;
;			.ORG	INT1addr
;		JMP	Int_External_INT1

			.ORG	OVF2addr	;定时器2 10ms基准
		JMP	Int_TC2_10ms

			.ORG	OVF1addr	;定时器1 0.1ms基准
		JMP	Int_TC1_Server

;			.ORG	OVF0addr	;定时器0 外部记数字
;		JMP	Int_TC0_Count

;			.ORG	URXCaddr
;		JMP	Int_USART_RxdEnd

;			.ORG	UTXCaddr
;		JMP	Int_USART_TxdEnd
;--------------------------程序区----------------------------------------------------------
		.ORG	0x0029				;ATmega16
Reset:
		CLI					;关 全局中断
	  	LDI  	temp1,high(RAMEND)
	    	OUT	SPH,temp1			;堆贱 高位
		LDI	temp1,low(RAMEND)
		OUT	SPL,temp1			;堆贱 低位

		LDI	temp1,0xFF
		MOV	R_ValueFFH,temp1

		CLR	R_Value0			;置00H寄存器
		MOV	Time_count,R_Value0

		LDI	System_Flag,0			;系统标志
		STS	EEPROM_Pag,R_Value0

		LDI	YL,low(Clr_SysRam_Begin)	;系统参数初次上电清零
		LDI	YH,high(Clr_SysRam_Begin)
		LDI	temp3,high(Clr_SysRam_End+1)
SysRamClr_Loop:
		ST	Y+,R_Value0
		CPI	YL,low(Clr_SysRam_End+1)
		CPC	YH,temp3
			BRLO	SysRamClr_Loop

System_InitIO:
		LDI 	temp1,PORTA_Initial		;IO初始化
		OUT  	PORTA,temp1
	     	LDI 	temp1,PORTB_Initial
		OUT  	PORTB,temp1
	     	LDI 	temp1,PORTC_Initial
		OUT  	PORTC,temp1
	     	LDI 	temp1,PORTD_Initial
		OUT  	PORTD,temp1

		LDI 	temp1,PA_DDR
		OUT  	DDRA,temp1

	     	LDI 	temp1,PB_DDR
		OUT  	DDRB,temp1

	     	LDI 	temp1,PC_DDR
		OUT  	DDRC,temp1

	     	LDI 	temp1,PD_DDR
		OUT  	DDRD,temp1


		OUT	MCUCR,R_Value0			;总上拉
		OUT	EEARH,R_Value0			;地址 高  EEPROM页(00--0FH)

		CALL	Delay_NOP_50ms
		CALL	Delay_NOP_50ms
;-------------------------------------------------------------------------------------------------
		CALL	TC2_Timer_Initial		;定时器2(10ms) 初始化程序
		CALL	TC1_Timer_Initial		;定时器1(0.1ms) 初始化程序
;		CALL	TC0_Timer_Initial		;定时器1(220v测频率)

							;<---------中断初始化
		LDI	temp1,(1<<TOIE2)|(1<<TOIE1)	;溢出中断/TC2 溢出中断
		OUT  	TIMSK,temp1
;

;    		LDI	temp1,(1<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0)
;		OUT 	WDTCR,temp1			;开  看门狗(111=2.1s)
;    		LDI	temp1,(0<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0)
;		OUT 	WDTCR,temp1			;开  看门狗	一定要两遍

		;INT0 INT1 下降边沿中断
		LDI	temp1,(1<<ISC11)|(0<<ISC10)|(1<<ISC01)|(0<<ISC00)
		OUT	MCUCR,temp1
		LDI	temp1,(1<<INT1)|(1<<INT0)	;使能外部中断0
		OUT	GIMSK,temp1

		LDI	R_Flag,0			;标志寄存器清零
		SEI					;开 全局中断

System_Init:

System_Example:
;------------------------------实验项目-------------------------------------------------------------
; 功能:红外线接收遥控
; 注意:	JP6 2-3脚应该短接 PA0作普通IO口
;		JP3 1-2脚应该短接
; 说明:把接受的解码通过LCD1602显示出来
iRomoteControl_Test:
		RCALL	CLR_LCD_Buf			;清除LCD1602显示缓充区		
		RCALL	LCMInit			;LCM初始化
		RCALL	Delay_500ms

		LDI	temp1,0			;www.mcutek.com
		STS	R_Position_Y,temp1
		LDI	temp1,0
		RCALL	Disp_LineMessage		
		
		LDI	temp1,1			;CODE1:  CODE2:
		STS	R_Position_Y,temp1
		LDI	temp1,1
		RCALL	Disp_LineMessage		
		RCALL	DispLCD1602Buf
		
		
iRomoteControl_Wait:
		RCALL	irReceive
		

		RJMP	iRomoteControl_Wait

;------------------------------------模块文件-----------------------------------------------------
		.include 	"INT0_Server.asm"	;外部中断'0'中断服务模块


		.include 	"TC2_Timer.asm"		;定时器TC2中断服务模块
		.include 	"TC1_Timer.asm"		;定时器TC1中断服务模块
;		.include 	"TC0_Timer.asm"		;定时器TC0中断服务模块
		.include 	"Delay.asm"		;系统延时模块

		.include 	"HS0038.asm"
		.include 	"LCD1602_Driver.asm"	;LCD1602A控制模块


		.include 	"HexBCD.asm"
;-----------------------------------------------------------------------------------------------
		.ORG	FLASHEND-1
		JMP	Reset





⌨️ 快捷键说明

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