?? system.asm
字號:
.INCLUDE hardware.inc
.INCLUDE key.inc
.DEFINE TIMER_CLKA_8K 0x0003
.DEFINE TIMER_CLKB_1 0x0030
.DEFINE RUN_TIMERA 0x1000
.DEFINE TIMER_DATA_FOR_8KHZ (0xFFFF-80)
.DEFINE P_ADC_MUX_Ctrl 0x702b
.DEFINE P_INT_Ctrl_New 0x702d
.EXTERNAL LED_No
.CODE
//============================================================================================
//函數: Clear_WatchDog()
//語法:void Clear_WatchDog(void)
//描述:清看門狗
//參數:無
//返回:無
//============================================================================================
.PUBLIC _System_Initial;
_System_Initial: .PROC
call L_User_Init_IO; //初始化IO口
call F_Key_Scan_Initial; //鍵盤初始化
call F_ADC_Init; //AD初始化
// call F_SP_INT_IRQ5; //ADC采樣
// call F_SP_INT_IRQ6 //LED顯示
// r1 = 0;
// [LED_No] = r1 //初始化LED顯示位數
retf
.ENDP
//============================================================================================
//函數: Clear_WatchDog()
//語法:void Clear_WatchDog(void)
//描述:清看門狗
//參數:無
//返回:無
//============================================================================================
.PUBLIC _Clear_WatchDog;
_Clear_WatchDog: .PROC
r1 = 0x01;
[P_Watchdog_Clear] = r1;
retf
.ENDP
//=============================================================================
// 函數: System_ServiceLoop();
// 語法: System_ServiceLoop();
// 描述: 程序掃描鍵盤、按鍵去抖調度
// 參數: 無
// 返回: 無
//=============================================================================
.PUBLIC _System_ServiceLoop;
_System_ServiceLoop: .PROC
call F_Key_Scan_ServiceLoop; //掃描鍵盤
call F_Key_DebounceCnt_Down; //按鍵去抖
RETF;
.ENDP
//============================================================================================
//函數: L_User_Init_IO
//語法:L_User_Init_IO()
//描述:初始化A口低八位為下拉電阻輸入,高八位為同相高電平輸出
// 初始化B口低四位為同相高電平輸出,
//參數:無
//返回:無
//=============================================================================================
.PUBLIC L_User_Init_IO;
L_User_Init_IO: .PROC
r1 = 0xff10;
[P_IOA_Attrib] = r1;
[P_IOA_Dir] = r1;
r1 = 0xff00;
[P_IOA_Data] = r1;
r1 = 0x000F;
[P_IOB_Attrib] = r1;
[P_IOB_Dir] = r1;
[P_IOB_Data] = r1;
RETF
.ENDP;
//============================================================================================
//函數: ADC_Init()
//語法:void ADC_Init()
//描述:初始化ADC
//參數:無
//返回:無
//=============================================================================================
.PUBLIC _ADC_Init;
.PUBLIC F_ADC_Init;
_ADC_Init: .PROC
F_ADC_Init:
r1 = 0x0004 //選擇通道LINE_IN為IOA4
[P_ADC_MUX_Ctrl] = r1
r1 = [P_ADC_Ctrl]
r1 |= 0x0001 //允許A/D轉換
[P_ADC_Ctrl] = r1
r1 = [P_DAC_Ctrl]
r1 &= 0xffe7;
[P_DAC_Ctrl] = r1
retf
.ENDP
//============================================================================================
//函數: SP_INT_IRQ5()
//語法:void SP_INT_IRQ5(void)
//描述:初始化中斷為2HZ定時中斷源,用來確定ADC采樣時間定時.1秒鐘采樣一次.
//參數:無
//返回:無
//=============================================================================================
.PUBLIC _SP_INT_IRQ5; //初始化中斷為2HZ定時中斷源
.PUBLIC F_SP_INT_IRQ5;
_SP_INT_IRQ5: .PROC
F_SP_INT_IRQ5:
r1 = [P_INT_Ctrl_New];
r1 = r1 |0x0004;
[P_INT_Ctrl_New] = r1;
irq on; //開中斷
retf
.ENDP;
//============================================================================================
//函數: turn_off_IRQ5()
//語法:void SP_INT_IRQ5(void)
//描述:初始化中斷為2HZ定時中斷源
//參數:無
//返回:無
//=============================================================================================
.PUBLIC _turn_off_IRQ5; //初始化中斷為2HZ定時中斷源
_turn_off_IRQ5: .PROC
r1 = [P_INT_Ctrl_New];
r1 &= 0xfffb;
[P_INT_Ctrl_New] = r1;
retf;
.ENDP
//============================================================================================
//函數: UART_Init()
//語法:void UART_Init(void)
//描述:通過串行通訊傳輸采樣溫度值
//參數:無
//返回:無
//=============================================================================================
.PUBLIC _UART_Init;
.PUBLIC F_UART_Init
_UART_Init: .PROC
F_UART_Init:
r1 = [P_IOB_Attrib] //設置IOB7為輸入IOB10為輸出
r1 = r1 | 0x0480;
[P_IOB_Attrib] = R1;
r1 = [P_IOB_Dir]
r1 = r1 | 0x0400;
[P_IOB_Dir] = R1;
r1 = [P_IOB_Data]
r1 = r1 & 0xffb7;
[P_IOB_Data] = R1;
R1 = 0x006b; //設置波特率為115.2Kbps
[P_UART_BaudScalarLow] = R1;
R1 = 0x0000;
[P_UART_BaudScalarHigh] = R1;
// R1 = 0x0000;
// R4 = 0x00C0; //使能輸入和輸出
// [P_UART_Command1] = R1;
// [P_UART_Command2] = R4;
.ENDP
//============================================================================================
//函數: SP_INT_IRQ6()
//語法:void SP_INT_IRQ6(void)
//描述:初始化中斷IRQ6
//參數:無
//返回:無
//=============================================================================================
.PUBLIC _SP_INT_IRQ6; //128hz
.PUBLIC F_SP_INT_IRQ6; //128hz
_SP_INT_IRQ6: .PROC
F_SP_INT_IRQ6:
r1 = 0x0000;
[P_TimeBase_Setup]=r1 //128hz
r1 = [P_INT_Ctrl_New];
r1 = r1 |0x0001; //開中斷IRQ6
[P_INT_Ctrl_New]= r1
irq on;
RETF;
.ENDP
//============================================================================================
//函數: turn_off_timerA
//語法:turn_off_timerA
//描述:關閉定時器B
//參數:無
//返回:無
//============================================================================================
.PUBLIC _turn_off_timerB
_turn_off_timerB: .PROC
r1 = [P_INT_Ctrl_New];
r1 &= 0xfbff;
[P_INT_Ctrl_New] = r1;
retf;
.ENDP
//============================================================================================
//函數: turn_on_relay;
//語法:void turn_on_relay;
//描述:打開繼電器
//參數:無
//返回:無
//============================================================================================
.PUBLIC _turn_on_relay;
.PUBLIC F_turn_on_relay;
_turn_on_relay: .PROC
F_turn_on_relay:
r1 = [P_IOA_Buffer]
r1 |= 0x0010;
[P_IOA_Buffer] = r1;
retf
.ENDP
//============================================================================================
//函數: turn_off_relay;
//語法:void turn_off_relay;
//描述:關閉繼電器
//參數:無
//返回:無
//============================================================================================
.PUBLIC _turn_off_relay;
.PUBLIC F_turn_off_relay;
_turn_off_relay: .PROC
F_turn_off_relay:
r1 = [P_IOA_Buffer]
r1 &= 0xffef;
[P_IOA_Buffer] = r1;
retf
.ENDP
//============================================================================================
//函數: SP_INT_TIMEA()
//語法:void SP_INT_TIMEA(void)
//描述:初始化中斷為1s定時中斷源
//參數:無
//返回:無
//============================================================================================
.PUBLIC _SP_INT_TIMEB;
_SP_INT_TIMEB: .PROC
//r1 = 0x0000; //CPU選頻
//[P_SystemClock] = r1;
r1 = TIMER_DATA_FOR_8KHZ
[P_TimerB_Data] = r1;
r1 = TIMER_CLKA_8K
[P_TimerB_Ctrl]=r1;
r1 = [P_INT_Ctrl_New];
r1 |= 0x0400 //IRQ1_TMA
[P_INT_Ctrl_New] = r1; //開TimeA 中斷
IRQ ON;
RETF
.ENDP
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -