📄 main_1204.c
字号:
#include "RS232.h"
#include "KeyPad.h"
#include "LCD.h"
#include "44b.h"
////////////////////////////////////
/*
void Test_Interrupt()
{
init_Interrupt_EINT4567();
RS232_send_string( "Press any Key && Check the RS232 output !\n" );
while( 1 ) ;
}
*/
//////////////////////////////////
void Test_LowPwr(void)
{
//Mode_LowPwr();
}
/////////////////////////////////
void Test_RS232(void)
{
int Msg = 32;
RS232_open(115200l,COM_8BIT|COM_NOPARITY|STOP_1BIT);
while( Msg < 128 )
{
RS232_send_char( Msg );
Msg++;
}
}
volatile unsigned int Key_Flag;
volatile unsigned int Key_Buf;
volatile unsigned int Timer_Count;
volatile unsigned int Key_Time;
volatile unsigned int Com_Time;
extern struct KEY_struct KEY_inf;
extern void Key_scan();
/****************************************
* PWM Timer Interrupt0/1/2/3/4/5 test *
****************************************/
void __irq Timer5Done(void)
{
rI_ISPC |= BIT_TIMER5;
Timer_Count++;
//RS232_send_char(variable);
//rPDATE ^= (1<<3);
//===== KeyPad scan =====
if( KEY_inf.Work ){
KEY_inf.Timer++;
if(KEY_inf.Timer > KEY_TIMER_MAX){
KEY_inf.Timer = 0;
Key_scan();
}
}
}
void Timer5_init(void)
{
rINTMSK |= BIT_TIMER5;
Timer_Count = 0;
pISR_TIMER5=(int)Timer5Done;
// rINTMSK=~(BIT_GLOBAL|BIT_TIMER5);
// pISR_TIMER5=(int)Timer5Done;
rPCONE = ( rPCONE & (~(3<<6)) ) | ( (0x1)<<6 );
rPDATE &= ~(1<<3);
//rTCFG0 = 0xf0f0f;
//rTCFG1 = 0x01234;
rCLKCON |= 1<<3;
rTCFG0 &= 0x0000FFFF;
rTCFG1 &= 0x000FFFFF;
rTCFG1 |= 0x3<<20;
//rTCNTB5=0xffff;
rTCNTB5 = ( MCLK )/(1000*16);
//rTCON=0x2222202;
//rTCON=0x5999901;
rTCON = 0x2<<24;
rTCON = 0x5<<24;
rINTMSK &= ~(BIT_GLOBAL|BIT_TIMER5);
//while(1);
//rINTMSK=BIT_GLOBAL;
}
/*
void Test_PWM(void)
{
rPCONE = ( rPCONE & (~(3<<6)) ) | ( (0x2)<<6 ) ;
rPUPE = rPUPE & (~(1<<3)) ;
rTCON = rTCON & (~(0xf<<0)) ; // clear manual update bit, stop Timer3
rTCFG0 &= 0xffff0000; // set Timer 2&3 prescaler 0
rTCFG1 &= 0xfffffff0; // set Timer 2 MUX 1/16
rTCFG1 |= 0x00000003; // set Timer 2 MUX 1/16
rTCNTB0 = ( MCLK )/(1000*16); //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low
rTCMPB0 = (rTCNTB0*(100-50))/100; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
rTCON = rTCON & (~(0xf<<0)) | (0x0a<<0) ;
//自动重装,输出取反关闭,更新TCNTBn、TCMPBn,死区控制器关闭
rTCON = rTCON & (~(0xf<<0)) | (0x09<<0) ; //开启蜂鸣器的叫声
while(1);
}
//=============================
void __irq MyKey_Interrupt(void)
{
int which_int_key;
which_int_key = rEXTINTPND ;
rEXTINTPND = 0xf ; //clear EXTINTPND reg.
rI_ISPC = BIT_EINT4567 ; //clear pending_bit
rPCONG &= ~(0xFF<<8); //GPC567 is input
switch(which_int_key)
{
case 1:
RS232_send_string("EINT==4\n");
which_int_key=0;
break;
case 2:
RS232_send_string("EINT==5\n");
which_int_key=0;
break;
case 4:
RS232_send_string("EINT==6\n");
which_int_key=0;
break;
case 8:
RS232_send_string("EINT==7\n");
which_int_key=0;
break;
default :
break;
}
while( (rPDATG&0x00f0) != 0x00f0 ) ;
//Delay( 50 ) ; //
rPCONG = rPCONG | ( 0xff<<8 ); //EINT7~5
}
//=============================
void __irq Only_Interrupt(void)
{
rEXTINTPND = 0xF;
rI_ISPC |= BIT_EINT4567;
rPCONG &= ~(0xFF<<8);
KEY_inf.Trag = 1;
RS232_send_string("EINT Trag\n");
}
void Test_EINT4567(void)
{
//rINTMSK = 0x7ffffff;
//pISR_EINT4567 = (unsigned)Key_Interrupt ;
rINTMSK |= BIT_EINT4567;
rCLKCON |= 1<<10;
rINTCON = 0x5 ;
rINTMOD = 0x0 ;
rPCONG |= 0xFF<<8;
rPUPG &= ~(0xF<<4);
rEXTINT &= 0x0000FFFF;
rEXTINT |= 0x33330000;
//rEXTINT = rEXTINT & (~(0x222<<20)) ;
rPCONC &= ~0x3ff;
rPCONC |= 0x155;
rPDATC &= ~0x1f;
rEXTINTPND = 0xF;
rI_ISPC |= BIT_EINT4567;
pISR_EINT4567 = (unsigned)Only_Interrupt ;
rINTMSK &= ~( BIT_GLOBAL | BIT_EINT4567 ) ;
while(1);
}
*/
struct RS232_inf{
unsigned char Rx_ON;
unsigned char Tx_ON;
};
struct RS232_BUF_STRUCT{
unsigned int pInput;
unsigned int pOutput;
unsigned char Data[2048];
};
struct RS232_BUF_STRUCT RS232_buf_inf;
volatile unsigned int RS232_Timer;
volatile unsigned int RS232_Count;
void __irq ISR_RS232_Rx(void)
{
rI_ISPC = BIT_URXD1;
if(rUFSTAT1 & 0xf){
RS232_Timer = 0;
while( (rUFSTAT1&0xf) >0 )
{
RS232_buf_inf.Data[ RS232_buf_inf.pInput++ ] = rURXH1;
RS232_buf_inf.pInput &= 0x7FF;
RS232_Count++;
}
if(RS232_Count > 15){
RS232_Count = 0;
RS232_send_char('G');
}
}
}
//=============================
int RS232_init(unsigned int baud, unsigned int mode)
{
rCLKCON |= (1<<9);
rPCONC |= 0x0f000000;
rPDATC |= 0x4000;
RS232_Timer = 0;
RS232_Count = 0;
RS232_buf_inf.pInput = 0;
pISR_URXD1=(unsigned)ISR_RS232_Rx;
rUBRDIV1= ( (int)(MCLK/(16*baud) + 0.5) -1 );
//rUFCON1 = 0xf7; // Reset FIFO
//rUFCON1 = 0x00;
rUFCON1 = (1<<4) | (3<<1) | 1;
rUMCON1 = 0x0;
rULCON1 = mode; //
//rUCON1 = 0x245;
//rUCON1 = 0x05;
rUCON1 = 0x285;
rINTMSK=~(BIT_GLOBAL|BIT_URXD1);
//rUBRDIV1=((mul_div(MCLK,2,baud<<4)+1)>>1)-1;//
//rUBRDIV1= ( (int)(MCLK/(16*baud) + 0.5) -1 );
//rUFCON1 = 0xf1; // normal FIFO
//while(1);
return 0;
}
///////////////////////////////
void Test_KeyPad(void)
{
Key_open();
Timer5_init();
while(1){
if(KEY_inf.Value != 0){
RS232_send_char(KEY_inf.Value);
KEY_inf.Value = 0;
}
}
}
///////////////////////////////
int Main(void)
{
unsigned char k;
StartTest:
//RS232_open(115200,COM_8BIT|COM_NOPARITY|STOP_1BIT);
LCD_open();
Key_open();
LCD_clear_screen();
LCD_locate(1,6); LCD_write_string("功能测试",1);
LCD_locate(6,4); LCD_write_string("[1] 中断测试",0);
LCD_locate(8,4); LCD_write_string("[2] 低功耗测试",0);
LCD_locate(10,4); LCD_write_string("[3] 串口测试",0);
//Test_PWM();
//Test_EINT4567();
RS232_init(115200,COM_8BIT|COM_NOPARITY|STOP_1BIT);
Test_KeyPad();
k=0;
while(k<'1' || k>'3'){
k = Key_get(1);
}
switch(k)
{
case '1':
//Test_Interrupt();
break;
case '2':
//Test_LowPwr();
break;
case '3':
//Test_RS232();
break;
default:
break;
}
goto StartTest;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -