/*-------------------------------------------------------------------------- 1. 项目 : EM78P153程序框架 2. 作者 : Etual / Etual@163.com 3. 日期 : 2008 - 12 - 10 4. 编译平台 : WicePlus2.6081015 ---------------------------------------------------------------------------*/ /* * 包含下面用到的宏定义符号 */ include "head153.h"
;--------------------------------------------------------------------------------- /* * 寄存器定义 */ ABUFF EQU 0x10 PSWBUFF EQU 0x11 IntrCnt EQU 0x12
/*-------------------------------------------------------------------------------*/ /* * 中断向量 */ ORG 0X00 jmp start ORG 0X08 jmp int_tcc ORG 0x20 /* * TCC 中断服务函数 */ INT_TCC: mov abuff,a swap abuff swapa psw mov pswbuff,a /* * 产生几个基准时间 */ inc IntrCnt ;--------------------------------------------------------------------- /* * 在这里添加需要的中断函数 */ nop ;--------------------------------------------------------------------- int_end: bc 0x0f,0 ; Clear TCC interrupt flag swapa pswbuff mov psw,a swapa abuff reti
;---------------------------MAIN PROGRAM------------------------------ start: call SysInit loop: /* * 主循环,添加实际项目的功能模块 */ com 0x06 ;----------------------------- HaltProc: eni wdtc /* * 大循环周期 0.128ms * 128 = 16.3ms */ mov a,@128 sub a,Intrcnt jbs psw,c jmp HaltProc clr Intrcnt jmp loop
/*--------------------------------------------------------------------------------- 功能 : 系统初始化。 ---------------------------------------------------------------------------------*/ SysInit: disi ; jbs psw,4 ; 程序看门狗复位纠错处理 ; jmp error_proc
InitSRAM: /*------------------------------------------------ 上电清空所有的RAM 调用格式 : CLEAR_ALL_RAM FROM,TO 宏参数定义 : FROM: 开始地址 TO : 结束地址 -------------------------------------------------*/ nop CLEAR_ALL_RAM
InitCont: /*------------------------------------------------- TCC定时器设置 调用格式 : CONT_SETUP MACRO arg1 宏参数定义 : TCC_1_1 ~ TCC_1_256 预分频 TCC_SRC_INT / TCC_SRC_EXT TCC源选择 INT:内部时钟,EXT 外部计数 TCC_EDGE_RISE / TCC_EDGE_FALL 触发弦选择 RISE 上升弦,FALL 下降弦 TCC_PRESCAL / WDT_PRESCAL 预分频分给TCC还是WDT -------------------------------------------------*/ nop CONT_SETUP TCC_PRESCAL | TCC_1_1 | TCC_SRC_INT InitIO: /*----------------------------------------------- IO 口方向以及上下拉设置 IOW MACRO ARG1,ARG2 IOR REG1,REG2 IOR REG2 -> REG1 IOW REG1,REG2 IOW REG2 -> REG1 ------------------------------------------------*/ nop mov a,@0X00 iow 0x05 ; port5 I/O mov a,@0x00 iow 0X06 ; port6 I/O mov a,@0XFF iow 0x0b ; PULL DOWN 0:ENABLE, 1:DISABLE mov a,@0X00 iow 0x0c ; OPEN DRAIN 0:DISABLE, 1:ENABLE mov a,@0xff iow 0X0D ; PULL HIGH 0:ENABLE, 1:DISABLE InitWatchdog: /*------------------------------------------------ 看门狗设置 WDT_SETUP MACRO arg1 宏参数定义: WDT_ENABLE / WDT_DISABLE 允许看门狗 ROC_ENABLE / ROC_DISABLE R OPTION EIS_IO / EIS_INT P60 作为IO还是外部中断 -------------------------------------------------*/ nop WDT_SETUP WDT_ENABLE | ROC_DISABLE | EIS_IO InitInterrupt: /*------------------------------------------------ 中断设置 IMR1_SETUP MACRO arg1 argument : IMR_TCC /IMR_EXT ------------------------------------------------*/ nop IMR1_SETUP IMR_TCC ret
|