Compare commits
49 Commits
78 changed files with 3385 additions and 5167 deletions
Binary file not shown.
Binary file not shown.
@ -0,0 +1,30 @@ |
|||
{ |
|||
"files.associations": { |
|||
"UART0.C": "cpp", |
|||
"bsp_config.h": "c", |
|||
"stc_macro.h": "c", |
|||
"type.h": "c", |
|||
"main.h": "c", |
|||
"bsp_config_delay.h": "c", |
|||
"bsp_key.h": "c", |
|||
"stc_macro.H": "cpp", |
|||
"uart_x.h": "c", |
|||
"UART4.C": "cpp", |
|||
"tpc_x.h": "c", |
|||
"uart3.h": "c", |
|||
"time.h": "c", |
|||
"debug.h": "c", |
|||
"app_config.h": "c", |
|||
"task_nfc.h": "c", |
|||
"task_debug.h": "c", |
|||
"clib.h": "c", |
|||
"uart2.h": "c", |
|||
"task_rfid.h": "c", |
|||
"task_rs485.h": "c", |
|||
"rs485.h": "c", |
|||
"bsp_led.h": "c", |
|||
"task_nfc_auth.h": "c", |
|||
"stc_stc8h.h": "c", |
|||
"task.h": "c" |
|||
} |
|||
} |
|||
@ -1,107 +1,233 @@ |
|||
#include "app_config.h" |
|||
#include "../bsp/cs1232.h" |
|||
#include "../bsp/chipid.h" |
|||
#include "../bsp/bsp_rfid.h" |
|||
#include "../msp/eeprom.h" |
|||
|
|||
GlobalParam G; |
|||
GlobalRegister R; |
|||
int i; |
|||
|
|||
void L3_param_init(void) |
|||
{ |
|||
#if 0 |
|||
int i; |
|||
for(i=0;i<D_ch_max_num;i++) |
|||
{ |
|||
G.weight[i] = 0; |
|||
} |
|||
G.allweight = 0; |
|||
G._total_weight = 0; |
|||
G._total_zweight = 0; |
|||
|
|||
//L3_eeprom_read_param();
|
|||
#endif |
|||
} |
|||
// void L3_param_init(void)
|
|||
// {
|
|||
// #if 0
|
|||
// G.xx = 0;
|
|||
// //L3_eeprom_read_param();
|
|||
// #endif
|
|||
// }
|
|||
|
|||
|
|||
//读取reg内容,写入iap
|
|||
void L3_reg_2_iap(void) |
|||
// void L3_reg_2_iap(void)
|
|||
// {
|
|||
// #if 0
|
|||
// iapData.slaver_id = R.p.slaver_id;
|
|||
// iapData.adc_ch_status = R.p.adc_ch_status;
|
|||
// iapData.weight_max = R.p.weight_max;
|
|||
// iapData.lmd = R.p.lmd;
|
|||
// iapData.adc_blur_mid = R.p.adc_blur_mid;
|
|||
// iapData.adc_blur_avg = R.p.adc_blur_avg;
|
|||
// iapData.adc_blur_shift[0] = R.p.adc_blur_shift[0];
|
|||
// iapData.adc_blur_shift[1] = R.p.adc_blur_shift[1];
|
|||
// iapData.adc_blur_shift[2] = R.p.adc_blur_shift[2];
|
|||
// iapData.adc_blur_threshold[0] = R.p.adc_blur_threshold[0];
|
|||
// iapData.adc_blur_threshold[1] = R.p.adc_blur_threshold[1];
|
|||
// //写入eeprom
|
|||
// if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData,sizeof(IapData),TRUE) == 0)
|
|||
// {
|
|||
// L0_uart0_sendstr("e2p write success");
|
|||
// }
|
|||
// #endif
|
|||
// if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p,sizeof(R.p),TRUE) == 0)
|
|||
// {
|
|||
// L0_uart0_sendstr("e2p write success");
|
|||
// return;
|
|||
// }
|
|||
// L0_uart0_sendstr("e2p write failed");
|
|||
// }
|
|||
|
|||
// //读取iap内容,写入reg
|
|||
// void L3_iap_2_reg(void)
|
|||
// {
|
|||
// #if 0
|
|||
// if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData, NULL) == 1)
|
|||
// {
|
|||
// L0_uart0_sendstr("e2p read failed");
|
|||
// }
|
|||
// L0_uart0_sendstr("e2p read success");
|
|||
// R.p.slaver_id = iapData.slaver_id;
|
|||
// R.p.adc_ch_status = iapData.adc_ch_status;
|
|||
// R.p.weight_max = iapData.weight_max ;
|
|||
// R.p.lmd = iapData.lmd;
|
|||
// R.p.adc_blur_mid = iapData.adc_blur_mid;
|
|||
// R.p.adc_blur_avg = iapData.adc_blur_avg;
|
|||
// R.p.adc_blur_shift[0] = iapData.adc_blur_shift[0];
|
|||
// R.p.adc_blur_shift[1] = iapData.adc_blur_shift[1];
|
|||
// R.p.adc_blur_shift[2] = iapData.adc_blur_shift[2];
|
|||
// R.p.adc_blur_threshold[0] = iapData.adc_blur_threshold[0];
|
|||
// R.p.adc_blur_threshold[1] = iapData.adc_blur_threshold[1];
|
|||
// #endif
|
|||
// if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p, NULL) == 0)
|
|||
// {
|
|||
// L0_uart0_sendstr("e2p read success");
|
|||
// return;
|
|||
// }
|
|||
// L0_uart0_sendstr("e2p read failed");
|
|||
// }
|
|||
|
|||
void L3_reg_reset(void) |
|||
{ |
|||
#if 0 |
|||
iapData.slaver_id = R.p.slaver_id; |
|||
iapData.adc_ch_status = R.p.adc_ch_status; |
|||
iapData.weight_max = R.p.weight_max; |
|||
iapData.lmd = R.p.lmd; |
|||
iapData.adc_blur_mid = R.p.adc_blur_mid; |
|||
iapData.adc_blur_avg = R.p.adc_blur_avg; |
|||
iapData.adc_blur_shift[0] = R.p.adc_blur_shift[0]; |
|||
iapData.adc_blur_shift[1] = R.p.adc_blur_shift[1]; |
|||
iapData.adc_blur_shift[2] = R.p.adc_blur_shift[2]; |
|||
iapData.adc_blur_threshold[0] = R.p.adc_blur_threshold[0]; |
|||
iapData.adc_blur_threshold[1] = R.p.adc_blur_threshold[1]; |
|||
//写入eeprom
|
|||
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData,sizeof(IapData),TRUE) == 0) |
|||
//心电模式
|
|||
R.xd_mode = 0; |
|||
|
|||
//设置RFID对照表
|
|||
for(i=0; i<LED_BTN_NUM; i++) |
|||
{ |
|||
L0_uart0_sendstr("e2p write success"); |
|||
R.rfid_table[i] = 0x0000 + i; |
|||
} |
|||
#endif |
|||
if(L1_eep_write_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p,sizeof(R.p),TRUE) == 0) |
|||
|
|||
//sop板默认不需要授权、未授权
|
|||
R.auth_flag = (0<<4) | 0; |
|||
// R.auth_flag = (0<<4) | 0x01;
|
|||
|
|||
//从机ID
|
|||
R.slave_id = 0x03; |
|||
|
|||
//功耗模式:正常模式
|
|||
R.power_mode = POWER_NORMAL; |
|||
|
|||
//功能按键按下状态
|
|||
R.func_btn = 0; |
|||
|
|||
//设置led灯状态
|
|||
L3_led_clear(); |
|||
|
|||
//nfc编号
|
|||
L3_nfc_clear(); |
|||
|
|||
//4路RFID编号
|
|||
L3_rfid_clear(); |
|||
|
|||
//for test
|
|||
// R.slave_id = 0x01;
|
|||
// R.power_mode = 0;
|
|||
// R.func_btn = 1;
|
|||
// R.nfc.nfc_no[0] = 0x01;
|
|||
// R.nfc.nfc_no[1] = 0x23;
|
|||
// for(i=0;i<4;i++){
|
|||
// R.rfids[i].rfid_no[0] = 0xA0;
|
|||
// R.rfids[i].rfid_no[1] = 0xB0;
|
|||
// R.rfids[i].rssi = 0x61;
|
|||
// R.rfids[i].ant = i;
|
|||
// };
|
|||
} |
|||
|
|||
void L3_led_clear(void) |
|||
{ |
|||
//设置led灯状态
|
|||
for(i=0; i<LED_BTN_NUM; i++) |
|||
{ |
|||
L0_uart0_sendstr("e2p write success"); |
|||
return; |
|||
R.led_status[i] = 0; |
|||
} |
|||
L0_uart0_sendstr("e2p write failed"); |
|||
R.led_status[0] = 1; |
|||
} |
|||
|
|||
void L3_nfc_clear(void) |
|||
{ |
|||
R.nfc.nfc_no[0] = 0; |
|||
R.nfc.nfc_no[1] = 0; |
|||
} |
|||
|
|||
//读取iap内容,写入reg
|
|||
void L3_iap_2_reg(void) |
|||
void L3_rfid_clear(void) |
|||
{ |
|||
#if 0 |
|||
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, (U8*)&iapData, NULL) == 1) |
|||
for(i=0; i<4; i++) |
|||
{ |
|||
L0_uart0_sendstr("e2p read failed"); |
|||
} |
|||
L0_uart0_sendstr("e2p read success"); |
|||
R.p.slaver_id = iapData.slaver_id; |
|||
R.p.adc_ch_status = iapData.adc_ch_status; |
|||
R.p.weight_max = iapData.weight_max ; |
|||
R.p.lmd = iapData.lmd; |
|||
R.p.adc_blur_mid = iapData.adc_blur_mid; |
|||
R.p.adc_blur_avg = iapData.adc_blur_avg; |
|||
R.p.adc_blur_shift[0] = iapData.adc_blur_shift[0]; |
|||
R.p.adc_blur_shift[1] = iapData.adc_blur_shift[1]; |
|||
R.p.adc_blur_shift[2] = iapData.adc_blur_shift[2]; |
|||
R.p.adc_blur_threshold[0] = iapData.adc_blur_threshold[0]; |
|||
R.p.adc_blur_threshold[1] = iapData.adc_blur_threshold[1]; |
|||
#endif |
|||
if(L1_eep_read_block(D_EEP_PARAM_IN_SECTOR, D_EEP_PARAM_IN_BLOCK, D_EEP_SECTOR_BLOCK_SIZE, (U8*)&R.p, NULL) == 0) |
|||
R.rfids[i].rfid_no[0] = 0; |
|||
R.rfids[i].rfid_no[1] = 0; |
|||
R.rfids[i].rssi = 0; |
|||
R.rfids[i].ant = 0; |
|||
}; |
|||
} |
|||
|
|||
void L3_reg_init(void) |
|||
{ |
|||
L3_reg_reset(); |
|||
//L3_iap_2_reg();
|
|||
} |
|||
|
|||
U8 L3_new_rfid_1(U16 rfidno, U8 rssi, U8 ant) |
|||
{ |
|||
U8 i = 0; |
|||
for(i=0; i<4; i++) |
|||
{ |
|||
L0_uart0_sendstr("e2p read success"); |
|||
return; |
|||
if(R.rfids[i].rfid_no[0] == 0 && R.rfids[i].rfid_no[1] == 0) |
|||
{ |
|||
//空位置
|
|||
R.rfids[i].rfid_no[0] = rfidno >> 8 & 0xFF; |
|||
R.rfids[i].rfid_no[1] = rfidno >> 0 & 0xFF; |
|||
R.rfids[i].rssi = rssi; |
|||
R.rfids[i].ant = ant; |
|||
return 1; |
|||
} |
|||
if(R.rfids[i].rfid_no[0] == (rfidno >> 8 & 0xFF) && R.rfids[i].rfid_no[1] == (rfidno >> 0 & 0xFF)) |
|||
{ |
|||
//该rfid已经存在
|
|||
break; |
|||
} |
|||
} |
|||
L0_uart0_sendstr("e2p read failed"); |
|||
return 0; |
|||
} |
|||
|
|||
void L3_reg_reset(void) |
|||
U8 L3_new_rfid(U16 rfidno, U8 rssi, U8 ant) |
|||
{ |
|||
R.p.adc_ch_status = ADC_status_ch2_Ready | ADC_status_ch3_Ready | ADC_status_ch4_Ready; //修改采集通道
|
|||
R.p.slaver_id = D_UART4_485_SLAVER_ID; |
|||
R.p.weight_max = 500; //500kg
|
|||
R.p.lmd = 2; //2mv/v
|
|||
R.p.adc_blur_mid = 1; |
|||
R.p.adc_blur_avg = 6; |
|||
R.p.adc_blur_shift[0] = 0; |
|||
R.p.adc_blur_shift[1] = 2; |
|||
R.p.adc_blur_shift[2] = 4; |
|||
R.p.adc_blur_threshold[0] = 1600; //g
|
|||
R.p.adc_blur_threshold[1] = 700; //g
|
|||
U8 i = 0; |
|||
for(i=0; i<RFID_BUF_NUM; i++) |
|||
{ |
|||
if(R.rfids[i].rfid_no[0] == 0 && R.rfids[i].rfid_no[1] == 0) |
|||
{ |
|||
//空位置
|
|||
break; |
|||
} |
|||
if(R.rfids[i].rfid_no[0] == (rfidno >> 8 & 0xFF) && R.rfids[i].rfid_no[1] == (rfidno >> 0 & 0xFF)) |
|||
{ |
|||
//该rfid已经存在
|
|||
break; |
|||
} |
|||
} |
|||
if(i == RFID_BUF_NUM) |
|||
{ |
|||
i = 0; |
|||
} |
|||
|
|||
//放入RFID(空位置、已存在位置[替换为最新的rssi和ant]、0位置[放满了就从头开始放)
|
|||
R.rfids[i].rfid_no[0] = rfidno >> 8 & 0xFF; |
|||
R.rfids[i].rfid_no[1] = rfidno >> 0 & 0xFF; |
|||
R.rfids[i].rssi = rssi; |
|||
R.rfids[i].ant = ant; |
|||
return 0; |
|||
} |
|||
|
|||
void L3_reg_init(void) |
|||
|
|||
|
|||
U8 L3_find_rfid_table(U16 rfidno) |
|||
{ |
|||
//R.reserved1 = R.reserved2 = R.reserved3 = 0x55;
|
|||
//R.zero = 0;
|
|||
//R.status_eep_save = 0;
|
|||
L3_reg_reset(); |
|||
L3_iap_2_reg(); |
|||
for(i=0; i<LED_BTN_NUM; i++) |
|||
{ |
|||
if(rfidno == R.rfid_table[i]) |
|||
{ |
|||
return i; |
|||
} |
|||
} |
|||
return LED_BTN_NUM; |
|||
} |
|||
|
|||
void L3_set_power_mode(U8 mode) |
|||
{ |
|||
// if(R.power_mode == POWER_NORMAL)
|
|||
// {
|
|||
// if(mode == POWER_LOW)
|
|||
// {
|
|||
// }
|
|||
// }
|
|||
R.power_mode = mode; |
|||
} |
|||
Binary file not shown.
@ -1,418 +0,0 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_adc.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../bsp/cs1232.h" |
|||
#include "../msp/uart0.h" |
|||
|
|||
//=============================================
|
|||
|
|||
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
|
|||
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
|
|||
|
|||
S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM]; |
|||
//S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
|
|||
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; |
|||
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; |
|||
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; |
|||
S_TASK_ADC_BLUR_SHOW ts_adc_blur_show; |
|||
|
|||
static U8 count_n(u8 n,u8 d) |
|||
{ |
|||
if(n < d) |
|||
{ |
|||
return MAX_OUT_NUM + n - d ; |
|||
} |
|||
else |
|||
{ |
|||
return n-d; |
|||
} |
|||
} |
|||
|
|||
U32 Abs(S32 a) |
|||
{ |
|||
if(a < 0) |
|||
{ |
|||
a = -a; |
|||
} |
|||
return a; |
|||
} |
|||
//ch是0123,代表4通道
|
|||
void L3_task_adc_init(U8 ch) |
|||
{ |
|||
//通道采集任务初始化
|
|||
L1_task_init(&ts_adc_channel_samples[ch].task); |
|||
L3_task_s_go(ts_adc_channel_samples[ch],D_task_init); |
|||
ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1; |
|||
ts_adc_channel_samples[ch].pool = 0; |
|||
ts_adc_channel_samples[ch].adcval = 0; |
|||
ts_adc_channel_samples[ch].n = 0; |
|||
ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch; |
|||
|
|||
#if 0 |
|||
//通道中值滤波任务初始化
|
|||
L1_task_init(&ts_adc_blur_mid[ch].task); |
|||
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init); |
|||
ts_adc_blur_mid[ch].n = 0; |
|||
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid; |
|||
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch; |
|||
#endif |
|||
|
|||
//通道均值滤波任务初始化
|
|||
L1_task_init(&ts_adc_blur_avg[ch].task); |
|||
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init); |
|||
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg; |
|||
ts_adc_blur_avg[ch].avgval = 0; |
|||
ts_adc_blur_avg[ch].n = 0; |
|||
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch; |
|||
|
|||
//通道移位滤波任务初始化
|
|||
L1_task_init(&ts_adc_blur_shift[ch].task); |
|||
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init); |
|||
ts_adc_blur_shift[ch].n = 0; |
|||
ts_adc_blur_shift[ch].h = 0; |
|||
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0]; |
|||
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1]; |
|||
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2]; |
|||
ts_adc_blur_shift[ch].sum[0] = 0; |
|||
ts_adc_blur_shift[ch].sum[1] = 0; |
|||
ts_adc_blur_shift[ch].sum[2] = 0; |
|||
ts_adc_blur_shift[ch].shiftval[0] = 0; |
|||
ts_adc_blur_shift[ch].shiftval[1] = 0; |
|||
ts_adc_blur_shift[ch].shiftval[2] = 0; |
|||
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch; |
|||
|
|||
//输出判定任务初始化
|
|||
L1_task_init(&ts_adc_blur_out[ch].task); |
|||
L3_task_s_go(ts_adc_blur_out[ch],D_task_init); |
|||
ts_adc_blur_out[ch].h= 0; |
|||
ts_adc_blur_out[ch].threshold[0] = D_COUNT_ADC(R.p.adc_blur_threshold[0]); //2KG
|
|||
ts_adc_blur_out[ch].threshold[1] = D_COUNT_ADC(R.p.adc_blur_threshold[1]); //0.5KG
|
|||
ts_adc_blur_out[ch].newnum = 0; |
|||
ts_adc_blur_out[ch].oldnum = 0; |
|||
ts_adc_blur_out[ch].newout = 0; |
|||
ts_adc_blur_out[ch].n = 0; |
|||
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch; |
|||
|
|||
#if 0 |
|||
//通道切换任务初始化
|
|||
//L1_task_init(&ts_adc_channel_switch.task);
|
|||
L3_task_s_go(ts_adc_channel_switch,D_task_init); |
|||
#endif |
|||
|
|||
} |
|||
|
|||
|
|||
void L3_task_show_init(void) |
|||
{ |
|||
//显示任务初始化
|
|||
L1_task_init(&ts_adc_blur_show.task); |
|||
L3_task_s_go(ts_adc_blur_show,D_task_init); |
|||
ts_adc_blur_show.rough_weight = 0; |
|||
} |
|||
|
|||
|
|||
//ADC Channel 采样任务
|
|||
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x53 |
|||
#define D_task_ADC_CHx_SAMPLE_READ 0x54 |
|||
#define D_task_ADC_CHx_SAMPLE_OUT 0x55 |
|||
void L3_task_adc_channel_sample(S_TASK_ADC_CHANNEL_SAMPLE *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_WAIT_LOW) |
|||
if(s->status == ADC_CHANNEL_STATUS_READY) //需要判断status是否ready,ready则读取,否则使用pool值
|
|||
{ |
|||
if(0 == L0_2dc_DOUT_AT(s->ch)) |
|||
{ |
|||
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
s->adcval = s->pool; |
|||
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_OUT,D_Tdelay_Msec(15)); //延时15ms,模拟一次采样过程
|
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ) |
|||
if(s->status == ADC_CHANNEL_STATUS_READY) //需要重新判断status是否ready,因为channel_switch任务随时可能修改status状态
|
|||
{ |
|||
s->adcval = Abs(L0_ADS1231_readCH(s->ch)); |
|||
L2_task_go(D_task_ADC_CHx_SAMPLE_OUT); |
|||
} |
|||
else |
|||
{ |
|||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT) |
|||
//不判断ready,不管是采集到的真实数据还是pool数据,都继续执行
|
|||
s->pool = s->adcval; |
|||
s->out[s->n] = s->adcval; |
|||
//R.adval[s->ch] = s->out[s->n];
|
|||
//L0_uart0_ulhex(R.adval[s->ch]);L0_uart0_0d0a();
|
|||
s->n++; |
|||
#if 0 |
|||
L0_uart0_ulhex(s->out[count_n(s->n,1)]); |
|||
L0_uart0_uc(' '); |
|||
//L0_uart0_ulhex(ts_adc_blur_mid[s->ch].out[count_n(ts_adc_blur_mid[s->ch].n,1)]);
|
|||
//L0_uart0_uc(' ');
|
|||
L0_uart0_ulhex(ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]); |
|||
L0_uart0_uc(' '); |
|||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[0]); |
|||
L0_uart0_uc(' '); |
|||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[1]); |
|||
L0_uart0_uc(' '); |
|||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[2]); |
|||
L0_uart0_uc(' '); |
|||
L0_uart0_ulhex(R.adval[s->ch]); |
|||
L0_uart0_uc(' '); |
|||
L0_uart0_ulhex(ts_adc_blur_out[s->ch].oldnum); |
|||
L0_uart0_0d0a(); |
|||
#endif |
|||
|
|||
if(s->n >= MAX_OUT_NUM) |
|||
{ |
|||
s->n = 0; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
#if 0 |
|||
//中值滤波任务
|
|||
#define D_task_ADC_CHx_FILTER_MID_GET 0x50 |
|||
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51 |
|||
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52 |
|||
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET) |
|||
if(ts_adc_channel_samples[s->ch].n >= s->max) |
|||
{ |
|||
U8 i = 0; |
|||
for(i=0;i<s->max;i++) |
|||
{ |
|||
s->in[i] = ts_adc_channel_samples[s->ch].out[i]; |
|||
} |
|||
ts_adc_channel_samples[s->ch].n = 0; |
|||
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT) |
|||
s->midval = Lc_vS32_media(s->in, s->max); |
|||
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT) |
|||
s->out[s->n] = s->midval; |
|||
//R.adval[s->ch] = s->out[s->n];
|
|||
s->n++; |
|||
if(s->n >= MAX_OUT_NUM) |
|||
{ |
|||
s->n = 0; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
#endif |
|||
|
|||
|
|||
//均值滤波任务
|
|||
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50 |
|||
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51 |
|||
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52 |
|||
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET) |
|||
if(ts_adc_channel_samples[s->ch].n >= s->max) |
|||
{ |
|||
U8 i = 0; |
|||
ts_adc_channel_samples[s->ch].n = 0; |
|||
for(i=0;i<s->max;i++) |
|||
{ |
|||
s->in[i] = ts_adc_channel_samples[s->ch].out[i]; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT) |
|||
s->avgval = Lc_vU32_avg(s->in,s->max); |
|||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT) |
|||
s->out[s->n] = s->avgval; |
|||
//R.adval[s->ch] = s->out[s->n];
|
|||
s->n++; |
|||
if(s->n >= MAX_OUT_NUM) |
|||
{ |
|||
s->n = 0; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
|||
|
|||
TTSS_Task_end(); |
|||
|
|||
|
|||
} |
|||
|
|||
|
|||
//移位滤波任务
|
|||
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50 |
|||
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51 |
|||
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52 |
|||
void L3_task_adc_filter_shift(S_TASK_ADC_BLUR_SHIFT *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET) |
|||
if(s->h != ts_adc_blur_avg[s->ch].n) |
|||
{ |
|||
s->in = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]; |
|||
s->h = ts_adc_blur_avg[s->ch].n; |
|||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_COUNT); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT) |
|||
s->sum[0] -= s->shiftval[0]; |
|||
s->sum[0] += s->in; |
|||
s->shiftval[0] = s->sum[0] >> s->shiftreg[0]; |
|||
s->sum[1] -= s->shiftval[1]; |
|||
s->sum[1] += s->in; |
|||
s->shiftval[1] = s->sum[1] >> s->shiftreg[1]; |
|||
s->sum[2] -= s->shiftval[2]; |
|||
s->sum[2] += s->in; |
|||
s->shiftval[2] = s->sum[2] >> s->shiftreg[2]; |
|||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT) |
|||
s->out[0][s->n] = s->shiftval[0]; |
|||
s->out[1][s->n] = s->shiftval[1]; |
|||
s->out[2][s->n] = s->shiftval[2]; |
|||
|
|||
|
|||
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
|
|||
s->n++; |
|||
if(s->n >= MAX_OUT_NUM) |
|||
{ |
|||
s->n = 0; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
|||
|
|||
TTSS_Task_end(); |
|||
|
|||
} |
|||
|
|||
//输出判定任务
|
|||
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50 |
|||
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51 |
|||
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52 |
|||
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53 |
|||
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET) |
|||
if(s->h != ts_adc_blur_shift[s->ch].n) |
|||
{ |
|||
s->h = ts_adc_blur_shift[s->ch].n; |
|||
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)]; |
|||
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)]; |
|||
//获取输出曲线val
|
|||
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)]; |
|||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT); |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
|
|||
//判断选择新曲线
|
|||
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
|
|||
{ |
|||
s->newnum = 0; |
|||
} |
|||
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
|
|||
{ |
|||
s->newnum = 1; |
|||
} |
|||
else |
|||
{ |
|||
s->newnum = 2; |
|||
} |
|||
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
|
|||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE) |
|||
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
|
|||
{ |
|||
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
|
|||
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
|
|||
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0]; |
|||
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout; |
|||
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1]; |
|||
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout; |
|||
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2]; |
|||
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout; |
|||
} |
|||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT) |
|||
R.adval[s->ch] = s->newout; |
|||
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
|
|||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
|||
|
|||
TTSS_Task_end(); |
|||
|
|||
} |
|||
|
|||
|
|||
//显示任务
|
|||
#define D_task_ADC_CHx_SHOW 0x50 |
|||
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_ADC_CHx_SHOW); |
|||
|
|||
TTSS_Task_step(D_task_ADC_CHx_SHOW) |
|||
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]); |
|||
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]); |
|||
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]); |
|||
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]); |
|||
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
|
|||
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
|
|||
{ |
|||
R.rough_weight = s->rough_weight; |
|||
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
|||
} |
|||
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
|
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
void L3_task_adc_handler(u8 ch) |
|||
{ |
|||
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]); |
|||
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
|
|||
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]); |
|||
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]); |
|||
L3_task_adc_filter_out(&ts_adc_blur_out[ch]); |
|||
} |
|||
|
|||
|
|||
|
|||
@ -1,119 +0,0 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_ADC_H |
|||
#define _APP_TASK_ADC_H |
|||
|
|||
#include "../app/app_config.h" |
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
|
|||
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
|
|||
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
|
|||
|
|||
//AD_CHANNEL_SAMPLE 采样
|
|||
#define MAX_OUT_NUM 6 |
|||
typedef struct _s_task_adc_channel_sample |
|||
{ |
|||
TS_task task; |
|||
vU8 status; |
|||
vU8 ch; |
|||
vU32 adcval; |
|||
vU32 pool; |
|||
vU8 n; |
|||
vU32 out[MAX_OUT_NUM]; |
|||
}S_TASK_ADC_CHANNEL_SAMPLE; |
|||
|
|||
//AD_BLUR_MID 中值滤波
|
|||
typedef struct _s_task_adc_blur_mid |
|||
|
|||
{ |
|||
TS_task task; |
|||
vU8 ch; |
|||
vU8 max; |
|||
vU32 in[MAX_OUT_NUM]; |
|||
vU32 midval; |
|||
vU8 n; |
|||
vU32 out[MAX_OUT_NUM]; |
|||
}S_TASK_ADC_BLUR_MID; |
|||
|
|||
//AD_BLUR_AVG 均值滤波
|
|||
typedef struct _s_task_adc_blur_avg |
|||
{ |
|||
TS_task task; |
|||
vU8 ch; |
|||
vU8 max; |
|||
vU32 in[MAX_OUT_NUM]; |
|||
vU32 avgval; |
|||
vU8 n; |
|||
vU32 out[MAX_OUT_NUM]; |
|||
}S_TASK_ADC_BLUR_AVG; |
|||
|
|||
//AD_BLUR_SHIFT 移位滤波
|
|||
typedef struct _s_task_adc_blur_shift |
|||
{ |
|||
TS_task task; |
|||
vU8 ch; |
|||
vU8 n; |
|||
vU8 h; |
|||
vU8 shiftreg[3]; |
|||
//vU8 max;
|
|||
vU32 in; |
|||
vU32 sum[3]; |
|||
vU32 shiftval[3]; |
|||
vU32 out[3][MAX_OUT_NUM]; |
|||
}S_TASK_ADC_BLUR_SHIFT; |
|||
|
|||
//AD_BLUR_DECIDE 输出判定
|
|||
typedef struct _s_task_adc_blur_out |
|||
{ |
|||
TS_task task; |
|||
vU8 ch; |
|||
vU32 in[2]; |
|||
U32 threshold[2]; |
|||
vU8 h; |
|||
vU8 oldnum; |
|||
vU8 newnum; |
|||
vU32 newout; |
|||
vU8 n; |
|||
}S_TASK_ADC_BLUR_OUT; |
|||
|
|||
//AD_BLUR_SHOW 显示
|
|||
typedef struct _s_task_adc_blur_show |
|||
{ |
|||
TS_task task; |
|||
vU32 rough_weight; |
|||
}S_TASK_ADC_BLUR_SHOW; |
|||
|
|||
|
|||
extern S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM]; |
|||
//extern S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
|
|||
extern S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; |
|||
extern S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; |
|||
extern S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; |
|||
extern S_TASK_ADC_BLUR_SHOW ts_adc_blur_show; |
|||
|
|||
|
|||
extern void L3_task_adc_init(U8 ch); |
|||
extern void L3_task_show_init(void); |
|||
extern void L3_task_adc_handler(U8 ch); |
|||
extern void L3_task_adc_init_handler(void); |
|||
extern void L3_task_adc_channel_switch_handler(void); |
|||
extern void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s); |
|||
|
|||
|
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_ADC_H
|
|||
|
|||
@ -0,0 +1,72 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_bled.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../bsp/bsp_led.h" |
|||
|
|||
S_TASK_BLED _s_task_bled; |
|||
static int i; |
|||
|
|||
void L3_task_bled_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_bled.task); |
|||
L3_task_s_go(_s_task_bled,D_task_init); |
|||
} |
|||
|
|||
#define D_task_BLED_SET 0x50 |
|||
|
|||
extern U16 L0_led_array_2_dat(); |
|||
void L3_task_bled_handler(S_TASK_BLED *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_BLED_SET); |
|||
|
|||
// TTSS_Task_step(D_task_BLED_SET)
|
|||
// //L0_uart0_sendArrayHex(R.led_status, 14);
|
|||
// for(i=0;i<LED_BTN_NUM; i++)
|
|||
// {
|
|||
// //BLED_SET_STATUS(i, R.led_status[i]);
|
|||
// bsp_bled_set(i, R.led_status[i]);
|
|||
// }
|
|||
// L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms);
|
|||
// //L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s);
|
|||
|
|||
// TTSS_Task_end();
|
|||
|
|||
TTSS_Task_step(D_task_BLED_SET) |
|||
//L0_uart0_sendArrayHex(R.led_status, 14);
|
|||
//设置LED0
|
|||
bsp_bled0_set(); |
|||
//其他其他LED
|
|||
bsp_bled_set_multi(L0_led_array_2_dat()); |
|||
L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_200ms); |
|||
//L2_task_go_Tdelay(D_task_BLED_SET,D_Tdelay_1s);
|
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
U16 L0_led_array_2_dat() |
|||
{ |
|||
int i = 0; |
|||
U16 dat = 0; |
|||
for(i = 1; i < LED_BTN_NUM; i++) |
|||
{ |
|||
dat |= ((U16)R.led_status[i] << (i-1)); |
|||
} |
|||
return dat; |
|||
} |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,83 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_btn.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../bsp/bsp_key.h" |
|||
#include "../bsp/bsp_led.h" |
|||
|
|||
S_TASK_BTN _s_task_btn; |
|||
static int i; |
|||
static U8 key; |
|||
|
|||
void L3_task_btn_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_btn.task); |
|||
L3_task_s_go(_s_task_btn,D_task_init); |
|||
} |
|||
|
|||
#define D_task_BTN_SET 0x50 |
|||
|
|||
void L3_task_btn_handler(S_TASK_BTN *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_BTN_SET); |
|||
|
|||
TTSS_Task_step(D_task_BTN_SET) |
|||
key = bsp_key_scan(); |
|||
if(key != BSP_KEY_NUM_MAX){ |
|||
L0_uart0_uc('#'); |
|||
L0_uart0_uchex(key); |
|||
|
|||
//功能按键
|
|||
if(key == 0) |
|||
{ |
|||
//设置功能按键按下
|
|||
R.func_btn = 1; |
|||
//此处代码注释掉:因为低功耗由上位机处理
|
|||
//功能键按下退出低功耗模式
|
|||
//L3_set_power_mode(POWER_NORMAL);
|
|||
} |
|||
//心电模式
|
|||
else if(key == 13) |
|||
{ |
|||
//设置心电模式按下
|
|||
R.xd_mode ^= 1; |
|||
//亮灯
|
|||
R.led_status[key] = R.xd_mode; |
|||
} |
|||
else if(key>=1 && key <=12) |
|||
{ |
|||
//如果不需要授权 or 需要但已经授权
|
|||
if(!(R.auth_flag & 0xF0) || (R.auth_flag & 0x0F)) |
|||
{ |
|||
//L0_uart0_uc('$');
|
|||
//L0_uart0_uchex(key);
|
|||
|
|||
//设置对应的rfid
|
|||
L3_new_rfid(R.rfid_table[key], 0, 0xFF); |
|||
|
|||
//亮灯
|
|||
R.led_status[key] = 1; |
|||
} |
|||
} |
|||
} |
|||
L2_task_go_Tdelay(D_task_BTN_SET,0); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,32 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_BTN_H |
|||
#define _APP_TASK_BTN_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_btn |
|||
{ |
|||
TS_task task; |
|||
}S_TASK_BTN; |
|||
|
|||
extern S_TASK_BTN _s_task_btn; |
|||
|
|||
extern void L3_task_btn_init(void); |
|||
extern void L3_task_btn_handler(S_TASK_BTN *s); |
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_BTN_H
|
|||
|
|||
@ -0,0 +1,113 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_btn_nonblock.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../bsp/bsp_key_nonblock.h" |
|||
#include "../bsp/bsp_led.h" |
|||
|
|||
S_TASK_BTN _s_task_btn; |
|||
static int i; |
|||
static U8 key; |
|||
|
|||
void L3_task_btn_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_btn.task); |
|||
L3_task_s_go(_s_task_btn,D_task_init); |
|||
} |
|||
|
|||
#define D_TASK_BTN_SCAN 0x50 |
|||
#define D_TASK_BTN_SHAKE 0x51 |
|||
#define D_TASK_BTN_COMPLETE 0x52 |
|||
|
|||
void L3_task_btn_handler(S_TASK_BTN *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_TASK_BTN_SCAN); |
|||
|
|||
TTSS_Task_step(D_TASK_BTN_SCAN) |
|||
//检测是否有按键按下,并记录行、列
|
|||
key = bsp_key_nonblock_scan(&s->row, &s->col); |
|||
if(key != BSP_KEY_NUM_MAX) |
|||
{ |
|||
//检测到的按键按下次数
|
|||
s->times = 0; |
|||
//最大次数阈值,超过阈值停止检测,判定为按键放开
|
|||
s->times_threshold = 100; |
|||
//再次检测(防抖动、检测按键弹起)
|
|||
L2_task_go_Tdelay(D_TASK_BTN_SHAKE, D_Tdelay_5ms); |
|||
} |
|||
|
|||
TTSS_Task_step(D_TASK_BTN_SHAKE) |
|||
//检测当前列是否仍处于按下状态,或者按下超时
|
|||
//此时row仍处于检测状态,不需要再次调用scan_row()
|
|||
if(bsp_key_nonblock_scan_col(s->col) == 0 || s->times > s->times_threshold) |
|||
{ |
|||
L2_task_go_Tdelay(D_TASK_BTN_COMPLETE, 0); |
|||
} |
|||
else |
|||
{ |
|||
s->times ++; |
|||
//每5s检测一次
|
|||
L2_task_go_Tdelay(D_TASK_BTN_SHAKE, D_Tdelay_5ms); |
|||
} |
|||
|
|||
TTSS_Task_step(D_TASK_BTN_COMPLETE) |
|||
//至少一次,防抖动
|
|||
if(s->times > 1) |
|||
{ |
|||
L0_uart0_uc('#'); |
|||
L0_uart0_uchex(key); |
|||
|
|||
//功能按键
|
|||
if(key == 0) |
|||
{ |
|||
//设置功能按键按下
|
|||
R.func_btn = 1; |
|||
//此处代码注释掉:因为低功耗由上位机处理
|
|||
//功能键按下退出低功耗模式
|
|||
//L3_set_power_mode(POWER_NORMAL);
|
|||
} |
|||
//心电模式
|
|||
else if(key == 13) |
|||
{ |
|||
//设置心电模式按下
|
|||
R.xd_mode ^= 1; |
|||
//亮灯
|
|||
R.led_status[key] = R.xd_mode; |
|||
} |
|||
else if(key>=1 && key <=12) |
|||
{ |
|||
//如果不需要授权 or 需要但已经授权
|
|||
if(!(R.auth_flag & 0xF0) || (R.auth_flag & 0x0F)) |
|||
{ |
|||
//L0_uart0_uc('$');
|
|||
//L0_uart0_uchex(key);
|
|||
|
|||
//设置对应的rfid
|
|||
L3_new_rfid(R.rfid_table[key], 0, 0xFF); |
|||
|
|||
//亮灯
|
|||
R.led_status[key] = 1; |
|||
} |
|||
} |
|||
} |
|||
L2_task_go_Tdelay(D_TASK_BTN_SCAN,0); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,35 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_BTN_NONBLOCK_H |
|||
#define _APP_TASK_BTN_NONBLOCK_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_btn |
|||
{ |
|||
TS_task task; |
|||
U8 row, col; |
|||
U16 times; |
|||
U16 times_threshold; |
|||
}S_TASK_BTN; |
|||
|
|||
extern S_TASK_BTN _s_task_btn; |
|||
|
|||
extern void L3_task_btn_init(void); |
|||
extern void L3_task_btn_handler(S_TASK_BTN *s); |
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_BTN_NONBLOCK_H
|
|||
|
|||
@ -0,0 +1,97 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_low_power.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../bsp/bsp_rfid.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../app/task_rfid.h" |
|||
|
|||
S_TASK_LOW_POWER _s_task_low_power; |
|||
|
|||
void L3_task_low_power_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_low_power.task); |
|||
L3_task_s_go(_s_task_low_power,D_task_init); |
|||
} |
|||
|
|||
#define D_task_LOW_POWER_SET 0x50 |
|||
#define D_task_LOW_POWER_CHANGE 0x51 |
|||
#define D_task_XD_CHANGE 0x52 |
|||
|
|||
void L3_task_low_power_handler(S_TASK_LOW_POWER *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
s->power_mode = R.power_mode; |
|||
s->xd_mode = R.xd_mode; |
|||
L2_task_go(D_task_LOW_POWER_SET); |
|||
|
|||
TTSS_Task_step(D_task_LOW_POWER_SET) |
|||
if(R.power_mode == POWER_LOW) |
|||
{ |
|||
//低功耗模式除了功能按键,所有灯全灭
|
|||
L3_led_clear(); |
|||
//低功耗模式下禁用RFID
|
|||
bsp_rfid_en(RFID_DISABLE); |
|||
//低功耗模式下,无法(也不需要)开启心电模式
|
|||
R.xd_mode = 0; |
|||
} |
|||
L2_task_go_Tdelay(D_task_LOW_POWER_CHANGE,0); |
|||
|
|||
TTSS_Task_step(D_task_LOW_POWER_CHANGE) |
|||
if(s->power_mode != R.power_mode) |
|||
{ |
|||
s->power_mode = R.power_mode; |
|||
|
|||
//退出低功耗模式时,启用RFID
|
|||
if(R.power_mode == POWER_NORMAL) |
|||
{ |
|||
//启用rfid
|
|||
bsp_rfid_en(RFID_ENABLE); |
|||
//重新初始化RFID任务
|
|||
L3_task_rfid_init(); |
|||
//心电进入正常模式
|
|||
R.xd_mode = 0; |
|||
} |
|||
} |
|||
L2_task_go_Tdelay(D_task_XD_CHANGE,0); |
|||
|
|||
TTSS_Task_step(D_task_XD_CHANGE) |
|||
//正常功耗模式下,心电模式才有意义
|
|||
if(R.power_mode == POWER_NORMAL) |
|||
{ |
|||
if(s->xd_mode != R.xd_mode) |
|||
{ |
|||
s->xd_mode = R.xd_mode; |
|||
if(R.xd_mode == 0) |
|||
{ |
|||
//启用rfid
|
|||
bsp_rfid_en(RFID_ENABLE); |
|||
//重新初始化RFID任务
|
|||
L3_task_rfid_init(); |
|||
} |
|||
else |
|||
{ |
|||
//禁用RFID
|
|||
bsp_rfid_en(RFID_DISABLE); |
|||
} |
|||
} |
|||
} |
|||
L2_task_go_Tdelay(D_task_LOW_POWER_SET,D_Tdelay_500ms); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,34 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_LOW_POWER_H |
|||
#define _APP_TASK_LOW_POWER_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_low_power |
|||
{ |
|||
U8 power_mode; |
|||
U8 xd_mode; |
|||
TS_task task; |
|||
}S_TASK_LOW_POWER; |
|||
|
|||
extern S_TASK_LOW_POWER _s_task_low_power; |
|||
|
|||
extern void L3_task_low_power_init(void); |
|||
extern void L3_task_low_power_handler(S_TASK_LOW_POWER *s); |
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_LOW_POWER_H
|
|||
|
|||
@ -0,0 +1,98 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_nfc.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart3.h" |
|||
|
|||
S_TASK_NFC _s_task_nfc; |
|||
|
|||
//=============================================
|
|||
void L3_task_nfc_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_nfc.task); |
|||
L3_task_s_go(_s_task_nfc,D_task_init); |
|||
} |
|||
|
|||
#define D_task_NFC_READ 0x50 |
|||
|
|||
void L3_task_nfc_handler(S_TASK_NFC *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_NFC_READ); |
|||
|
|||
TTSS_Task_step(D_task_NFC_READ) |
|||
if(ts_uart[uNum3].r.ok == 1) |
|||
{ |
|||
ts_uart[uNum3].r.ok = 0; |
|||
parse_nfc_pkg(); |
|||
} |
|||
//send next
|
|||
L2_task_go_Tdelay(D_task_NFC_READ, 0); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
//NFC协议:60 20 00 07 10 02 04 00 99 83 33 4E 36
|
|||
//起始帧:60
|
|||
//设备ID:20
|
|||
//数据长度:00 07
|
|||
//命令:10
|
|||
//数据:02 04 00 99 83 33 4E
|
|||
//校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值
|
|||
void parse_nfc_pkg() |
|||
{ |
|||
TPC_NFC *p = (TPC_NFC *) ts_uart[uNum3].r.buf; |
|||
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; |
|||
if(p->head == 0x60 && 1 /*count_ocr() */) |
|||
{ |
|||
U16 num = (U16)p->num[0] << 8 | p->num[1]; |
|||
//只读取0x10的协议
|
|||
if(p->cmd == 0x10 && num == 0x07){ |
|||
//1.判定NFC卡号是否符合规则
|
|||
//2.保存NFC卡号到寄存器
|
|||
R.nfc.nfc_no[0] = p->buf[num-2]; |
|||
R.nfc.nfc_no[1] = p->buf[num-1]; |
|||
//3.设定授权标志
|
|||
R.auth_flag |= 0x01; |
|||
//4.打印日志
|
|||
print_nfc_pkg(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
void print_nfc_pkg(TPC_NFC *p) |
|||
{ |
|||
L0_uart0_sendstr("\r\n--------- Recv NFC --------\r\n"); |
|||
L0_uart0_sendstr("id : "); |
|||
L0_uart0_uchex(p->slaveId); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("num: "); |
|||
L0_uart0_uchex(p->num[0]); |
|||
L0_uart0_uchex(p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("cmd: "); |
|||
L0_uart0_uchex(p->cmd); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("no : "); |
|||
L0_uart0_sendArrayHex(p->buf, (U16)p->num[0] << 8 | p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ocr: "); |
|||
L0_uart0_uchex(p->buf[(U16)p->num[0] << 8 | p->num[1]]); |
|||
L0_uart0_0d0a(); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,42 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_NFC_H |
|||
#define _APP_TASK_NFC_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_nfc |
|||
{ |
|||
TS_task task; |
|||
}S_TASK_NFC; |
|||
|
|||
#define TPC_NFC_DAT_MAX 16 |
|||
typedef struct _tpc_nfc_ |
|||
{ |
|||
U8 head; |
|||
U8 slaveId; |
|||
U8 num[2]; |
|||
U8 cmd; |
|||
U8 buf[TPC_NFC_DAT_MAX]; |
|||
U8 ocr; |
|||
}TPC_NFC; |
|||
|
|||
extern S_TASK_NFC _s_task_nfc; |
|||
extern void L3_task_nfc_init(void); |
|||
extern void L3_task_nfc_handler(S_TASK_NFC *s); |
|||
extern void parse_nfc_pkg(); |
|||
extern void print_nfc_pkg(TPC_NFC *p); |
|||
|
|||
#endif // #ifndef _APP_TASK_NFC_H
|
|||
@ -0,0 +1,60 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_nfc_auth.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart2.h" |
|||
|
|||
S_TASK_AUTH _s_task_auth; |
|||
|
|||
//=============================================
|
|||
void L3_task_auth_init(void) |
|||
{ |
|||
// _s_task_auth.auth_flag = R.auth_flag;
|
|||
_s_task_auth.auth_flag = 0x00; |
|||
L1_task_init(&_s_task_auth.task); |
|||
L3_task_s_go(_s_task_auth,D_task_init); |
|||
} |
|||
|
|||
#define D_task_AUTH_READ 0x50 |
|||
#define D_task_AUTH_SETZERO 0x52 |
|||
#define D_task_AUTH_PRINT 0x53 |
|||
|
|||
void L3_task_auth_handler(S_TASK_AUTH *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_AUTH_READ); |
|||
|
|||
TTSS_Task_step(D_task_AUTH_READ) |
|||
if(s->auth_flag != R.auth_flag){ |
|||
s->auth_flag = R.auth_flag; |
|||
//授权中
|
|||
if(R.auth_flag & 0x0F != 0){ |
|||
L2_task_go_Tdelay(D_task_AUTH_SETZERO,D_Tdelay_10s); |
|||
} |
|||
} |
|||
|
|||
TTSS_Task_step(D_task_AUTH_SETZERO) |
|||
//清除授权标志
|
|||
R.auth_flag &= 0xF0; |
|||
// L0_uart0_sendstr("Auth Expired.");
|
|||
// L2_task_go_Tdelay(D_task_AUTH_READ,0);
|
|||
L2_task_go(D_task_AUTH_READ); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,34 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_NFC_AUTH_H |
|||
#define _APP_TASK_NFC_AUTH_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
#include "../tpc/debug.h" |
|||
|
|||
typedef struct _s_task_auth |
|||
{ |
|||
TS_task task; |
|||
U8 auth_flag; |
|||
}S_TASK_AUTH; |
|||
|
|||
extern S_TASK_AUTH _s_task_auth; |
|||
|
|||
extern void L3_task_auth_init(void); |
|||
extern void L3_task_auth_handler(S_TASK_AUTH *s); |
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_NFC_AUTH_H
|
|||
|
|||
@ -1,63 +0,0 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_register.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
|
|||
//=============================================
|
|||
|
|||
S_TASK_REGVAL_LISTEN s_task_reglisten; |
|||
|
|||
void L3_task_reglisten_init(void) |
|||
{ |
|||
L1_task_init(&s_task_reglisten.task); |
|||
L3_task_s_go(s_task_reglisten,D_task_init); |
|||
} |
|||
|
|||
//清零任务
|
|||
#define D_task_WEIGHT_COUNT 0x50 |
|||
#define D_task_IAP 0x51 |
|||
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) |
|||
{ |
|||
|
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_WEIGHT_COUNT); |
|||
|
|||
TTSS_Task_step(D_task_WEIGHT_COUNT) |
|||
if(R.zero != 0) |
|||
{ |
|||
R.total_zweight = R.rough_weight; //皮重 = 毛重
|
|||
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
|||
R.zero = 0; |
|||
} |
|||
L2_task_go(D_task_IAP); //延时100ms
|
|||
|
|||
|
|||
TTSS_Task_step(D_task_IAP) |
|||
if(R.status_eep_save != 0) |
|||
{ |
|||
R.status_eep_save = 0; |
|||
L3_reg_2_iap();//写入IAP
|
|||
} |
|||
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
|
|||
|
|||
|
|||
TTSS_Task_end(); |
|||
|
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,172 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_rfid.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart4.h" |
|||
|
|||
S_TASK_RFID _s_task_rfid; |
|||
|
|||
// U8 RFID_READ_MASK[] = {'Y','F','R','S', 0x00, 0xAA};
|
|||
U8 RFID_READ_MASK[] = {'Y','F','R','S', 0x00, 0xAA}; //59 46 52 53 00 AA
|
|||
|
|||
//4通道,读取次数 3 3 3 3
|
|||
U8 rfidSetChannelCmd[] = {0xBB,0x00,0x1B,0x00,0x05,0x02,0x03,0x03,0x03,0x03,0x2E,0x7E}; |
|||
//设置功率 26dBm
|
|||
// U8 rfidSetWCmd[] = {0xBB,0x00,0xB6,0x00,0x02,0x0A,0x28,0xEA,0x7E};
|
|||
//设置功率 24dBm
|
|||
U8 rfidSetWCmd[] = {0xBB,0x00,0xB6,0x00,0x02,0x09,0x60,0x21,0x7E}; |
|||
//选择卡片
|
|||
U8 rfidSelCmd[] = {0x00}; |
|||
//轮询读取(FFFF代表永久轮询)
|
|||
U8 rfidLoopRead[] = {0xBB,0x00,0x27,0x00,0x03,0x22,0xFF,0xFF,0x4A,0x7E}; |
|||
|
|||
//=============================================
|
|||
void L3_task_rfid_init(void) |
|||
{ |
|||
_s_task_rfid.last_send_time = 0; |
|||
L1_task_init(&_s_task_rfid.task); |
|||
L3_task_s_go(_s_task_rfid,D_task_init); |
|||
} |
|||
|
|||
#define D_task_RFID_SET 0x50 |
|||
#define D_task_RFID_READ 0x51 |
|||
|
|||
void L3_task_rfid_handler(S_TASK_RFID *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L0_uart0_uchex(sizeof(rfidSetChannelCmd) / sizeof(U8)); |
|||
L0_uart0_uchex(sizeof(rfidSetWCmd) / sizeof(U8)); |
|||
L0_uart0_uchex(sizeof(rfidSelCmd) / sizeof(U8)); |
|||
L0_uart0_uchex(sizeof(rfidLoopRead) / sizeof(U8)); |
|||
//注意这里加delay,因为rfid_en是强推挽模式,强推挽模式生效有延迟,经测试这里的时间需要>=2s
|
|||
L2_task_go_Tdelay(D_task_RFID_SET,D_Tdelay_4s); |
|||
|
|||
TTSS_Task_step(D_task_RFID_SET) |
|||
//1个小时发一次
|
|||
if(s->last_send_time == 0 || D_sys_now - s->last_send_time > D_COUNT_JIFFIES(3600000)) |
|||
{ |
|||
//1.设置天线
|
|||
L0_uart4_sendArray(rfidSetChannelCmd, sizeof(rfidSetChannelCmd) / sizeof(U8)); |
|||
NOP10(); |
|||
//2.设置功率
|
|||
L0_uart4_sendArray(rfidSetWCmd, sizeof(rfidSetWCmd) / sizeof(U8)); |
|||
NOP10(); |
|||
//3.选择掩码
|
|||
L0_uart4_sendArray(rfidSelCmd, sizeof(rfidSelCmd) / sizeof(U8)); |
|||
NOP10(); |
|||
//4.启动轮询
|
|||
L0_uart4_sendArray(rfidLoopRead, sizeof(rfidLoopRead) / sizeof(U8)); |
|||
NOP10(); |
|||
//记录上次发送时间
|
|||
s->last_send_time = D_sys_now; |
|||
} |
|||
L2_task_go(D_task_RFID_READ); |
|||
|
|||
TTSS_Task_step(D_task_RFID_READ) |
|||
if(ts_uart[uNum4].r.ok == 1) |
|||
{ |
|||
ts_uart[uNum4].r.ok = 0; |
|||
parse_rfid_pkg(); |
|||
} |
|||
//read next
|
|||
L2_task_go_Tdelay(D_task_RFID_SET,0); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
U8 verify_mask(U8 *rfid) |
|||
{ |
|||
int i; |
|||
for(i=0;i<6;i++) |
|||
{ |
|||
if(rfid[i] != RFID_READ_MASK[i]) |
|||
{ |
|||
return 0; |
|||
} |
|||
} |
|||
return 1; |
|||
} |
|||
|
|||
//RFID协议:BB 02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98 0C 7E
|
|||
//帧头:BB
|
|||
//Type:00命令帧 /01响应帧 /02通知帧
|
|||
//Command: 07指令桢 /22单次读写 /27多次轮询 /28停止轮询 /0C选择 / B6设置功率
|
|||
//数据长度:00 11
|
|||
//数据:RSSI PC PC EPC0 00 10 71 00 00 52 EPC7 ANT [EB 98]
|
|||
//数据:D5 20 00 E2 00 10 71 00 00 52 9B 40 [EB 98]
|
|||
//校验:0C 从Type到数据字段 [02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98] 的所有字节的累加和
|
|||
//帧尾:7E
|
|||
void parse_rfid_pkg() |
|||
{ |
|||
TPC_RFID *p = (TPC_RFID *) ts_uart[uNum4].r.buf; |
|||
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; |
|||
p->tail = p->buf[p->num[0] << 8 | p->num[1] + 1]; |
|||
if(p->head == 0xBB && p->tail == 0x7E && 1 /*count_ocr() */) |
|||
{ |
|||
//只读取type=0x02, cmd=0x22的协议
|
|||
if(p->type == 0x02 && p->cmd == 0x22){ |
|||
U8 index = 0; |
|||
U16 num = (U16)p->num[0] << 8 | p->num[1]; |
|||
U16 rfidno = (U16)p->buf[num-5] << 8 | p->buf[num-4]; |
|||
U8 rssi = p->buf[0]; |
|||
U8 ant = p->buf[num-1]; |
|||
|
|||
//5.打印日志
|
|||
print_rfid_pkg(p); |
|||
|
|||
//校验RFID掩码
|
|||
if(!verify_mask(&p->buf[num-11])) |
|||
{ |
|||
L0_uart0_sendstr("---------- RFID Mask Error -------\r\n"); |
|||
return; |
|||
} |
|||
|
|||
//1.判定RFID卡号是否符合规则
|
|||
//2.保存RFID卡号到寄存器
|
|||
L3_new_rfid(rfidno, rssi, ant); |
|||
//3.查找编号是否在rfidtable中
|
|||
index = L3_find_rfid_table(rfidno); |
|||
//4.亮灯
|
|||
//TODO 如果缓冲区满了,没放进去,是否亮灯
|
|||
if(index < LED_BTN_NUM){ |
|||
R.led_status[index] = 1; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
void print_rfid_pkg(TPC_RFID *p) |
|||
{ |
|||
L0_uart0_sendstr("\r\n--------- Recv RFID --------\r\n"); |
|||
L0_uart0_sendstr("type : "); |
|||
L0_uart0_uchex(p->type); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("cmd: "); |
|||
L0_uart0_uchex(p->cmd); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("num: "); |
|||
L0_uart0_uchex(p->num[0]); |
|||
L0_uart0_uchex(p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("dat : "); |
|||
L0_uart0_sendArrayHex(p->buf, p->num[0] << 8 | p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ocr: "); |
|||
L0_uart0_uchex(p->ocr); |
|||
L0_uart0_0d0a(); |
|||
} |
|||
|
|||
|
|||
|
|||
@ -0,0 +1,45 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_RFID_H |
|||
#define _APP_TASK_RFID_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_rfid |
|||
{ |
|||
U32 last_send_time; |
|||
TS_task task; |
|||
}S_TASK_RFID; |
|||
|
|||
#define TPC_RFID_DAT_MAX 32 |
|||
typedef struct _tpc_rfid_ |
|||
{ |
|||
U8 head; |
|||
U8 type; |
|||
U8 cmd; |
|||
U8 num[2]; |
|||
U8 buf[TPC_RFID_DAT_MAX]; |
|||
U8 ocr; |
|||
U8 tail; |
|||
}TPC_RFID; |
|||
|
|||
extern S_TASK_RFID _s_task_rfid; |
|||
extern void L3_task_rfid_init(void); |
|||
extern void L3_task_rfid_handler(S_TASK_RFID *s); |
|||
extern void parse_rfid_pkg(); |
|||
extern void print_rfid_pkg(TPC_RFID *p); |
|||
|
|||
#endif // #ifndef _APP_TASK_RFID_H
|
|||
|
|||
@ -0,0 +1,158 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.c
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#include "task_rs485.h" |
|||
#include "../app/app_config.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../msp/uart0.h" |
|||
#include "../msp/uart2.h" |
|||
|
|||
S_TASK_RS485 _s_task_rs485; |
|||
TPC_RS485 tpc_rs485; |
|||
TPC_RS485_ACK tpc_rs485_ack; |
|||
static U8 acklen = 0; |
|||
static U8 i = 0; |
|||
U16 setLedStatus = 0; |
|||
|
|||
//=============================================
|
|||
void L3_task_rs485_init(void) |
|||
{ |
|||
L1_task_init(&_s_task_rs485.task); |
|||
L3_task_s_go(_s_task_rs485,D_task_init); |
|||
} |
|||
|
|||
#define D_task_RS485_READ 0x50 |
|||
#define D_task_RS485_PRINT 0x51 |
|||
#define D_task_RS485_ACK 0x52 |
|||
#define D_task_RS485_MODE 0x53 |
|||
|
|||
void L3_task_rs485_handler(S_TASK_RS485 *s) |
|||
{ |
|||
TTSS_Task_init() |
|||
L2_task_go(D_task_RS485_READ); |
|||
|
|||
TTSS_Task_step(D_task_RS485_READ) |
|||
if(ts_uart[uNum2].r.ok == 1) |
|||
{ |
|||
ts_uart[uNum2].r.ok = 0; |
|||
parse_rs485_pkg(); |
|||
} |
|||
//read next
|
|||
L2_task_go_Tdelay(D_task_RS485_READ,0); |
|||
|
|||
TTSS_Task_end(); |
|||
} |
|||
|
|||
//485协议:AA 00 04 01 10 00 00 15
|
|||
//FILTER:固定1个字节 AA
|
|||
//SLAVEID:固定1个字节,代表从机ID
|
|||
//CMDER: 固定1个字节,代表命令,每个从机自己定义。
|
|||
//NUM: 固定2个字节,高字节在前,代表后续DATA的长度(不包括ocr),比如0x0010,代表后续 16个字节
|
|||
//DATA:(Num 个字节)数据域
|
|||
//OCR:1个字节,代表校验和, = 从SlaveId开始 - DATA结束的所有字节之和。
|
|||
void parse_rs485_pkg() |
|||
{ |
|||
TPC_RS485 *p = (TPC_RS485 *) ts_uart[uNum2].r.buf; |
|||
p->ocr = p->buf[p->num[0] << 8 | p->num[1]]; |
|||
if(p->head[0] == 0xAA && 1 /*count_ocr() */) |
|||
{ |
|||
if(p->slaveId == R.slave_id && p->cmd == 0x10) |
|||
{ |
|||
//1.buf[0]高4位是否需要授权标志
|
|||
R.auth_flag &= 0x0F; |
|||
R.auth_flag |= p->buf[0] & 0xF0; |
|||
|
|||
//2.buf[0]低四位是否进入低功耗模式
|
|||
// R.low_power_mode = p->buf[0] & 0x0F;
|
|||
L3_set_power_mode(p->buf[0] & 0x0F); |
|||
|
|||
//3.buf[1-2], rfid映射
|
|||
//TODO 上位机发过来的rfid编号如何处理
|
|||
setLedStatus = (U16)p->buf[1] << 8 | p->buf[2]; |
|||
if(setLedStatus != 0x00) |
|||
{ |
|||
//0位是功能按键,常亮,不提供设置功能
|
|||
for(i=1;i<LED_BTN_NUM;i++) |
|||
{ |
|||
//不处理0,只处理1的情况(代表其他端产生了sop中的节点,比如平板上触发谈话等)
|
|||
if((setLedStatus >> i) & 0x0001) |
|||
{ |
|||
R.led_status[i] = 1; |
|||
} |
|||
} |
|||
} |
|||
|
|||
//构造响应包,并且返回
|
|||
acklen = constructor_rs485_ack(); |
|||
//写出
|
|||
L0_uart2_sendArray((U8*)&tpc_rs485_ack, acklen); |
|||
//日志
|
|||
print_rs485_pkg(p); |
|||
} |
|||
} |
|||
} |
|||
|
|||
void print_rs485_pkg(TPC_RS485 *p) |
|||
{ |
|||
L0_uart0_sendstr("\r\n--------- Recv RS485 --------\r\n"); |
|||
L0_uart0_sendstr("slaveId : "); |
|||
L0_uart0_uchex(p->slaveId); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("cmd: "); |
|||
L0_uart0_uchex(p->cmd); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("num: "); |
|||
L0_uart0_uchex(p->num[0]); |
|||
L0_uart0_uchex(p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("dat : "); |
|||
L0_uart0_sendArrayHex(p->buf, p->num[0] << 8 | p->num[1]); |
|||
L0_uart0_0d0a(); |
|||
L0_uart0_sendstr("ocr: "); |
|||
L0_uart0_uchex(p->ocr); |
|||
L0_uart0_0d0a(); |
|||
} |
|||
|
|||
U8 constructor_rs485_ack() |
|||
{ |
|||
U8 num = (1 + sizeof(R.nfc) + sizeof(R.rfids)); |
|||
tpc_rs485_ack.head[0] = 0xAA; |
|||
// tpc_rs485_ack.head[1] = 0x55;
|
|||
tpc_rs485_ack.slaveId = R.slave_id; |
|||
tpc_rs485_ack.cmd = 0x10; |
|||
tpc_rs485_ack.num[0] = (num >> 8) & 0xFF; |
|||
tpc_rs485_ack.num[1] = num & 0xFF; |
|||
tpc_rs485_ack.buf[0] = R.func_btn; |
|||
Lc_buf_copy_uc((U8*)&tpc_rs485_ack.buf[1], (U8*)&R.nfc, sizeof(R.nfc)); |
|||
Lc_buf_copy_uc((U8*)&tpc_rs485_ack.buf[1+sizeof(R.nfc)], (U8*)R.rfids, sizeof(R.rfids)); |
|||
tpc_rs485_ack.ocr = 0; |
|||
tpc_rs485_ack.ocr += tpc_rs485_ack.slaveId; |
|||
tpc_rs485_ack.ocr += tpc_rs485_ack.cmd; |
|||
tpc_rs485_ack.ocr += tpc_rs485_ack.num[0]; |
|||
tpc_rs485_ack.ocr += tpc_rs485_ack.num[1]; |
|||
for(i=0;i<num;i++) |
|||
{ |
|||
tpc_rs485_ack.ocr += tpc_rs485_ack.buf[i]; |
|||
} |
|||
tpc_rs485_ack.buf[num] = tpc_rs485_ack.ocr; |
|||
|
|||
//清0资源
|
|||
R.func_btn = 0; |
|||
L3_nfc_clear(); |
|||
L3_rfid_clear(); |
|||
|
|||
return 5 + num + 1; |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
@ -0,0 +1,56 @@ |
|||
////////////////////////////////////////////////////////////////////////////
|
|||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|||
///-------------------------------------------------------------------------
|
|||
/// @file bsp_drv.h
|
|||
/// @brief bsp @ driver config
|
|||
///-------------------------------------------------------------------------
|
|||
/// @version 1.0
|
|||
/// @author CC
|
|||
/// @date 20180331
|
|||
/// @note cc_AS_stc02
|
|||
|
|||
//////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
#ifndef _APP_TASK_RS485_H |
|||
#define _APP_TASK_RS485_H |
|||
|
|||
#include "../ctask/task.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
typedef struct _s_task_rs485 |
|||
{ |
|||
TS_task task; |
|||
}S_TASK_RS485; |
|||
|
|||
#define TPC_RS485_DAT_MAX 32 |
|||
typedef struct _tpc_rs485_ |
|||
{ |
|||
U8 head[1]; |
|||
U8 slaveId; |
|||
U8 cmd; |
|||
U8 num[2]; |
|||
U8 buf[TPC_RS485_DAT_MAX]; |
|||
U8 ocr; |
|||
}TPC_RS485; |
|||
|
|||
#define TPC_RS485_ACK_DAT_MAX 32 |
|||
typedef struct _tpc_rs485_ack_ |
|||
{ |
|||
U8 head[1]; |
|||
U8 slaveId; |
|||
U8 cmd; |
|||
U8 num[2]; |
|||
U8 buf[TPC_RS485_ACK_DAT_MAX]; |
|||
U8 ocr; |
|||
}TPC_RS485_ACK; |
|||
|
|||
extern S_TASK_RS485 _s_task_rs485; |
|||
extern void L3_task_rs485_init(void); |
|||
extern void L3_task_rs485_handler(S_TASK_RS485 *s); |
|||
extern void parse_rs485_pkg(); |
|||
extern void print_rs485_pkg(TPC_RS485 *p); |
|||
extern U8 constructor_rs485_ack(); |
|||
|
|||
|
|||
#endif // #ifndef _APP_TASK_RS485_H
|
|||
|
|||
@ -0,0 +1,214 @@ |
|||
#include "bsp_config_delay.h" |
|||
|
|||
#if ((TYPE_MCU == TYPE_MCU_STC_8H) \ |
|||
|| (TYPE_MCU == TYPE_MCU_STC_8G) \ |
|||
|| (TYPE_MCU == TYPE_MCU_STC_8A) \ |
|||
|| (TYPE_MCU == TYPE_MCU_STC_8F)) \ |
|||
|
|||
#if (D_sys_MainFre == MainFre_22M) |
|||
|
|||
void Delay100us() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j; |
|||
|
|||
i = 3; |
|||
j = 221; |
|||
do |
|||
{ |
|||
while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay200us() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j; |
|||
|
|||
_nop_(); |
|||
i = 6; |
|||
j = 188; |
|||
do |
|||
{ |
|||
while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay500us() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j; |
|||
|
|||
i = 15; |
|||
j = 90; |
|||
do |
|||
{ |
|||
while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay600us() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j; |
|||
|
|||
_nop_(); |
|||
i = 18; |
|||
j = 57; |
|||
do |
|||
{ |
|||
while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
|
|||
void Delay1ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j; |
|||
|
|||
i = 29; |
|||
j = 183; |
|||
do |
|||
{ |
|||
while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay100ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j, k; |
|||
|
|||
i = 12; |
|||
j = 57; |
|||
k = 122; |
|||
do |
|||
{ |
|||
do |
|||
{ |
|||
while (--k); |
|||
} while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay200ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j, k; |
|||
|
|||
i = 23; |
|||
j = 113; |
|||
k = 248; |
|||
do |
|||
{ |
|||
do |
|||
{ |
|||
while (--k); |
|||
} while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay500ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j, k; |
|||
|
|||
i = 57; |
|||
j = 27; |
|||
k = 112; |
|||
do |
|||
{ |
|||
do |
|||
{ |
|||
while (--k); |
|||
} while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay600ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j, k; |
|||
|
|||
i = 68; |
|||
j = 83; |
|||
k = 238; |
|||
do |
|||
{ |
|||
do |
|||
{ |
|||
while (--k); |
|||
} while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void Delay1000ms() //@22.1184MHz
|
|||
{ |
|||
unsigned char i, j, k; |
|||
|
|||
i = 113; |
|||
j = 53; |
|||
k = 228; |
|||
do |
|||
{ |
|||
do |
|||
{ |
|||
while (--k); |
|||
} while (--j); |
|||
} while (--i); |
|||
} |
|||
|
|||
void delayInMs(U16 n) |
|||
{ |
|||
if(n<=50) |
|||
{ |
|||
do{ |
|||
Delay1ms(); |
|||
}while(n--); |
|||
} |
|||
else if(n<=100) |
|||
{ |
|||
Delay100ms(); |
|||
} |
|||
else if(n<=200) |
|||
{ |
|||
Delay200ms(); |
|||
} |
|||
else if(n<=500) |
|||
{ |
|||
Delay500ms(); |
|||
} |
|||
else if(n<=600) |
|||
{ |
|||
Delay600ms(); |
|||
} |
|||
else if(n<=1000) |
|||
{ |
|||
Delay1000ms(); |
|||
} |
|||
else |
|||
{ |
|||
} |
|||
} |
|||
|
|||
void delayInUs(U16 n) |
|||
{ |
|||
if(n<=100) |
|||
{ |
|||
Delay100us(); |
|||
} |
|||
else if(n<=200) |
|||
{ |
|||
Delay200us(); |
|||
} |
|||
else if(n<=500) |
|||
{ |
|||
Delay500us(); |
|||
} |
|||
else if(n<=600) |
|||
{ |
|||
Delay600us(); |
|||
} |
|||
else if(n<=1000) |
|||
{ |
|||
Delay1ms(); |
|||
} |
|||
else |
|||
{ |
|||
} |
|||
} |
|||
|
|||
#endif //end (D_sys_MainFre == MainFre_22M)
|
|||
#endif |
|||
@ -0,0 +1,9 @@ |
|||
#ifndef _BSP_CONFIG_DELAY_H |
|||
#define _BSP_CONFIG_DELAY_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
extern void delayInUs(U16 n); |
|||
extern void delayInMs(U16 n); |
|||
|
|||
#endif |
|||
@ -0,0 +1,150 @@ |
|||
#include "bsp_key.h" |
|||
#include "bsp_config_delay.h" |
|||
|
|||
U32 timeout = 0x3FFFFF; |
|||
|
|||
U8 bsp_key_init(void) |
|||
{ |
|||
//初始化为高电平
|
|||
KR1 = KR2 = KR3 = KR4 = 1; |
|||
//初始化为高电平
|
|||
KC1 = KC2 = KC3 = KC4 = 1; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
void scan_row(U8 r) |
|||
{ |
|||
KR1 = 1; |
|||
KR2 = 1; |
|||
KR3 = 1; |
|||
KR4 = 1; |
|||
switch(r){ |
|||
case 1: |
|||
KR1 = 0;break; |
|||
case 2: |
|||
KR2 = 0;break; |
|||
case 3: |
|||
KR3 = 0;break; |
|||
case 4: |
|||
KR4 = 0;break; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
|
|||
U8 scan_col(U8 c) |
|||
{ |
|||
timeout = 0x3FFFFF; |
|||
if(c == 1) |
|||
{ |
|||
if(KC1 == 0) |
|||
{ |
|||
delayInMs(10); |
|||
if(KC1 == 0) |
|||
{ |
|||
while(KC1 == 0 && timeout--); |
|||
return 1; |
|||
} |
|||
} |
|||
} |
|||
else if(c == 2){ |
|||
if(KC2 == 0) |
|||
{ |
|||
delayInMs(10); |
|||
if(KC2 == 0) |
|||
{ |
|||
while(KC2 == 0 && timeout--); |
|||
return 1; |
|||
} |
|||
} |
|||
} |
|||
else if(c == 3){ |
|||
if(KC3 == 0) |
|||
{ |
|||
delayInMs(10); |
|||
if(KC3 == 0) |
|||
{ |
|||
while(KC3 == 0 && timeout--); |
|||
return 1; |
|||
} |
|||
} |
|||
} |
|||
else if(c == 4){ |
|||
if(KC4 == 0) |
|||
{ |
|||
delayInMs(10); |
|||
if(KC4 == 0) |
|||
{ |
|||
while(KC4 == 0 && timeout--); |
|||
return 1; |
|||
} |
|||
} |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
U8 bsp_key_scan(void) |
|||
{ |
|||
//扫描第1行
|
|||
scan_row(1); |
|||
if(scan_col(1) > 0){ |
|||
return 0; |
|||
} |
|||
if(scan_col(2) > 0){ |
|||
return 1; |
|||
} |
|||
if(scan_col(3) > 0){ |
|||
return 2; |
|||
} |
|||
if(scan_col(4) > 0){ |
|||
return 3; |
|||
} |
|||
|
|||
//扫描第2行
|
|||
scan_row(2); |
|||
if(scan_col(1) > 0){ |
|||
return 4; |
|||
} |
|||
if(scan_col(2) > 0){ |
|||
return 5; |
|||
} |
|||
if(scan_col(3) > 0){ |
|||
return 6; |
|||
} |
|||
if(scan_col(4) > 0){ |
|||
return 7; |
|||
} |
|||
|
|||
//扫描第3行
|
|||
scan_row(3); |
|||
if(scan_col(1) > 0){ |
|||
return 8; |
|||
} |
|||
if(scan_col(2) > 0){ |
|||
return 9; |
|||
} |
|||
if(scan_col(3) > 0){ |
|||
return 10; |
|||
} |
|||
if(scan_col(4) > 0){ |
|||
return 11; |
|||
} |
|||
|
|||
//扫描第4行
|
|||
scan_row(4); |
|||
if(scan_col(1) > 0){ |
|||
return 12; |
|||
} |
|||
if(scan_col(2) > 0){ |
|||
return 13; |
|||
} |
|||
// if(scan_col(KC3) > 0){
|
|||
// return 14;
|
|||
// }
|
|||
// if(scan_col(KC4) > 0){
|
|||
// return 15;
|
|||
// }
|
|||
|
|||
return BSP_KEY_NUM_MAX; |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
#ifndef _BSP_KEY_H |
|||
#define _BSP_KEY_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
#define BSP_KEY_NUM_MAX 99 |
|||
|
|||
extern U8 bsp_key_init(void); |
|||
extern U8 bsp_key_scan(void); |
|||
|
|||
#endif |
|||
@ -0,0 +1,138 @@ |
|||
#include "bsp_key_nonblock.h" |
|||
|
|||
U32 timeout = 0x3FFFFF; |
|||
|
|||
U8 bsp_key_nonblock_init(void) |
|||
{ |
|||
//初始化为高电平
|
|||
KR1 = KR2 = KR3 = KR4 = 1; |
|||
//初始化为高电平
|
|||
KC1 = KC2 = KC3 = KC4 = 1; |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
void bsp_key_nonblock_scan_row(U8 r) |
|||
{ |
|||
KR1 = 1; |
|||
KR2 = 1; |
|||
KR3 = 1; |
|||
KR4 = 1; |
|||
switch(r){ |
|||
case 1: |
|||
KR1 = 0;break; |
|||
case 2: |
|||
KR2 = 0;break; |
|||
case 3: |
|||
KR3 = 0;break; |
|||
case 4: |
|||
KR4 = 0;break; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
|
|||
U8 bsp_key_nonblock_scan_col(U8 c) |
|||
{ |
|||
if(c == 1) |
|||
{ |
|||
return (KC1 == 0); |
|||
} |
|||
else if(c == 2) |
|||
{ |
|||
return (KC2 == 0); |
|||
} |
|||
else if(c == 3) |
|||
{ |
|||
return (KC3 == 0); |
|||
} |
|||
else if(c == 4) |
|||
{ |
|||
return (KC4 == 0); |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
U8 bsp_key_nonblock_scan(U8 *row, U8 *col) |
|||
{ |
|||
//扫描第1行
|
|||
bsp_key_nonblock_scan_row(1); |
|||
*row = 1; |
|||
if(bsp_key_nonblock_scan_col(1) > 0){ |
|||
*col = 1; |
|||
return 0; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(2) > 0){ |
|||
*col = 2; |
|||
return 1; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(3) > 0){ |
|||
*col = 3; |
|||
return 2; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(4) > 0){ |
|||
*col = 4; |
|||
return 3; |
|||
} |
|||
|
|||
//扫描第2行
|
|||
bsp_key_nonblock_scan_row(2); |
|||
*row = 2; |
|||
if(bsp_key_nonblock_scan_col(1) > 0){ |
|||
*col = 1; |
|||
return 4; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(2) > 0){ |
|||
*col = 2; |
|||
return 5; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(3) > 0){ |
|||
*col = 3; |
|||
return 6; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(4) > 0){ |
|||
*col = 4; |
|||
return 7; |
|||
} |
|||
|
|||
//扫描第3行
|
|||
bsp_key_nonblock_scan_row(3); |
|||
*row = 3; |
|||
if(bsp_key_nonblock_scan_col(1) > 0){ |
|||
*col = 1; |
|||
return 8; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(2) > 0){ |
|||
*col = 2; |
|||
return 9; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(3) > 0){ |
|||
*col = 3; |
|||
return 10; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(4) > 0){ |
|||
*col = 4; |
|||
return 11; |
|||
} |
|||
|
|||
//扫描第4行
|
|||
bsp_key_nonblock_scan_row(4); |
|||
*row = 4; |
|||
if(bsp_key_nonblock_scan_col(1) > 0){ |
|||
*col = 1; |
|||
return 12; |
|||
} |
|||
if(bsp_key_nonblock_scan_col(2) > 0){ |
|||
*col = 2; |
|||
return 13; |
|||
} |
|||
// if(bsp_key_nonblock_scan_col(KC3) > 0){
|
|||
// return 14;
|
|||
// }
|
|||
// if(bsp_key_nonblock_scan_col(KC4) > 0){
|
|||
// return 15;
|
|||
// }
|
|||
|
|||
return BSP_KEY_NUM_MAX; |
|||
} |
|||
|
|||
@ -0,0 +1,12 @@ |
|||
#ifndef _BSP_KEY_NONBLOCK_H |
|||
#define _BSP_KEY_NONBLOCK_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
#define BSP_KEY_NUM_MAX 99 |
|||
|
|||
extern U8 bsp_key_nonblock_init(void); |
|||
extern U8 bsp_key_nonblock_scan(U8 *row, U8 *col); |
|||
extern U8 bsp_key_nonblock_scan_col(U8 col); |
|||
|
|||
#endif |
|||
@ -0,0 +1,52 @@ |
|||
#include "bsp_led.h" |
|||
|
|||
void bsp_led_init(void) |
|||
{ |
|||
//初始化
|
|||
LED0 = LED0_OFF; |
|||
BLED0 = BLED0_OFF; |
|||
//BLED1 = BLED2 = BLED3 = BLED4 = BLED5 = BLED6 = BLED0_OFF;
|
|||
//BLED7 = BLED8 = BLED9 = BLED10 = BLED11 = BLED12 = BLED13 = BLED0_OFF;
|
|||
MBI_CLK = 0; |
|||
MBI_SDI = 0; |
|||
} |
|||
|
|||
void bsp_led_set(U8 status) |
|||
{ |
|||
LED0 = status; |
|||
} |
|||
|
|||
void bsp_bled0_set() |
|||
{ |
|||
BLED0 = BLED0_ON; |
|||
} |
|||
|
|||
extern void delay(unsigned int i); |
|||
void bsp_bled_set_multi(unsigned int dat) |
|||
{ |
|||
unsigned char i; |
|||
|
|||
//其他led通过芯片驱动
|
|||
for(i=0; i<16; i++) |
|||
{ |
|||
MBI_SDI = (dat & 0x8000) ? 1 : 0; |
|||
MBI_CLK = 1; |
|||
dat <<= 1; |
|||
MBI_CLK = 0; |
|||
} |
|||
|
|||
//锁存
|
|||
MBI_LE = 1; |
|||
delay(100); |
|||
MBI_LE = 0; |
|||
|
|||
//输出
|
|||
delay(1000); |
|||
MBI_OE = 0; |
|||
} |
|||
|
|||
void delay(unsigned int i) |
|||
{ |
|||
while(i>0) |
|||
i--; |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
#ifndef _BSP_LED_H |
|||
#define _BSP_LED_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
extern void bsp_led_init(void); |
|||
extern void bsp_led_set(U8 status); |
|||
extern void bsp_bled0_set(); |
|||
extern void bsp_bled_set_multi(unsigned int dat); |
|||
|
|||
#define BLED_SET_STATUS(N, status); do { \ |
|||
BLED##N = status; \ |
|||
}while(0); |
|||
|
|||
#endif //_BSP_LED_H
|
|||
@ -0,0 +1,13 @@ |
|||
#include "bsp_rfid.h" |
|||
#include "bsp_config_delay.h" |
|||
|
|||
U8 bsp_rfid_init(void) |
|||
{ |
|||
bsp_rfid_en(RFID_ENABLE); |
|||
return 0; |
|||
} |
|||
|
|||
void bsp_rfid_en(U8 status) |
|||
{ |
|||
RFID_EN_PIN = status; |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
#ifndef _BSP_RFID_H |
|||
#define _BSP_RFID_H |
|||
|
|||
#include "bsp_config.h" |
|||
|
|||
extern U8 bsp_rfid_init(void); |
|||
extern void bsp_rfid_en(U8 status); |
|||
|
|||
#endif |
|||
@ -1,589 +0,0 @@ |
|||
#ifndef __STC_stc8a8k_H_ |
|||
#define __STC_stc8a8k_H_ |
|||
// STC_stc8a8k.h
|
|||
#include<intrins.h> |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
|
|||
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
|
|||
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
|
|||
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//包含本头文件后,不用另外再包含"REG51.H"
|
|||
|
|||
//内核特殊功能寄存器 // 复位值 描述
|
|||
sfr ACC = 0xE0; //0000,0000 累加器Accumulator
|
|||
sfr B = 0xF0; //0000,0000 B寄存器
|
|||
sfr PSW = 0xD0; //0000,0000 程序状态字
|
|||
sbit CY = PSW^7; |
|||
sbit AC = PSW^6; |
|||
sbit F0 = PSW^5; |
|||
sbit RS1 = PSW^4; |
|||
sbit RS0 = PSW^3; |
|||
sbit OV = PSW^2; |
|||
sbit P = PSW^0; |
|||
sfr SP = 0x81; //0000,0111 堆栈指针
|
|||
sfr DPL = 0x82; //0000,0000 数据指针低字节
|
|||
sfr DPH = 0x83; //0000,0000 数据指针高字节
|
|||
|
|||
//I/O 口特殊功能寄存器
|
|||
sfr P0 = 0x80; //1111,1111 端口0
|
|||
sbit P00 = P0^0; |
|||
sbit P01 = P0^1; |
|||
sbit P02 = P0^2; |
|||
sbit P03 = P0^3; |
|||
sbit P04 = P0^4; |
|||
sbit P05 = P0^5; |
|||
sbit P06 = P0^6; |
|||
sbit P07 = P0^7; |
|||
sfr P1 = 0x90; //1111,1111 端口1
|
|||
sbit P10 = P1^0; |
|||
sbit P11 = P1^1; |
|||
sbit P12 = P1^2; |
|||
sbit P13 = P1^3; |
|||
sbit P14 = P1^4; |
|||
sbit P15 = P1^5; |
|||
sbit P16 = P1^6; |
|||
sbit P17 = P1^7; |
|||
sfr P2 = 0xA0; //1111,1111 端口2
|
|||
sbit P20 = P2^0; |
|||
sbit P21 = P2^1; |
|||
sbit P22 = P2^2; |
|||
sbit P23 = P2^3; |
|||
sbit P24 = P2^4; |
|||
sbit P25 = P2^5; |
|||
sbit P26 = P2^6; |
|||
sbit P27 = P2^7; |
|||
sfr P3 = 0xB0; //1111,1111 端口3
|
|||
sbit P30 = P3^0; |
|||
sbit P31 = P3^1; |
|||
sbit P32 = P3^2; |
|||
sbit P33 = P3^3; |
|||
sbit P34 = P3^4; |
|||
sbit P35 = P3^5; |
|||
sbit P36 = P3^6; |
|||
sbit P37 = P3^7; |
|||
sfr P4 = 0xC0; //1111,1111 端口4
|
|||
sbit P40 = P4^0; |
|||
sbit P41 = P4^1; |
|||
sbit P42 = P4^2; |
|||
sbit P43 = P4^3; |
|||
sbit P44 = P4^4; |
|||
sbit P45 = P4^5; |
|||
sbit P46 = P4^6; |
|||
sbit P47 = P4^7; |
|||
sfr P5 = 0xC8; //xxxx,1111 端口5
|
|||
sbit P50 = P5^0; |
|||
sbit P51 = P5^1; |
|||
sbit P52 = P5^2; |
|||
sbit P53 = P5^3; |
|||
sbit P54 = P5^4; |
|||
sbit P55 = P5^5; |
|||
sbit P56 = P5^6; |
|||
sbit P57 = P5^7; |
|||
sfr P6 = 0xE8; //0000,0000 端口6
|
|||
sbit P60 = P6^0; |
|||
sbit P61 = P6^1; |
|||
sbit P62 = P6^2; |
|||
sbit P63 = P6^3; |
|||
sbit P64 = P6^4; |
|||
sbit P65 = P6^5; |
|||
sbit P66 = P6^6; |
|||
sbit P67 = P6^7; |
|||
sfr P7 = 0xF8; //0000,0000 端口7
|
|||
sbit P70 = P7^0; |
|||
sbit P71 = P7^1; |
|||
sbit P72 = P7^2; |
|||
sbit P73 = P7^3; |
|||
sbit P74 = P7^4; |
|||
sbit P75 = P7^5; |
|||
sbit P76 = P7^6; |
|||
sbit P77 = P7^7; |
|||
|
|||
|
|||
///00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
///01 推挽输出 20mA 加限流
|
|||
///10 高阻
|
|||
///11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
|
|||
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
|
|||
sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
|
|||
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
|
|||
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
|
|||
sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
|
|||
sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
|
|||
sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
|
|||
sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
|
|||
sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
|
|||
sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
|
|||
sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
|
|||
sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
|
|||
sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
|
|||
sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
|
|||
sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
|
|||
sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
|
|||
|
|||
//系统管理特殊功能寄存器
|
|||
sfr PCON = 0x87; //0001,0000 电源控制寄存器
|
|||
sfr AUXR = 0x8E; //0000,0000 辅助寄存器
|
|||
|
|||
#define TOx12 BITN7 |
|||
#define T1x12 BITN6 |
|||
#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
|
|||
#define T2R BITN4 //定时器2 运行 =1
|
|||
#define T2_C BITN3 //定时器/计数器选择
|
|||
#define T2x12 BITN2 |
|||
#define EXTRAM BITN1 |
|||
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
|
|||
|
|||
|
|||
|
|||
|
|||
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
|
|||
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
|
|||
sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
|
|||
sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
|
|||
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
|
|||
//-----------------------------------------------------------------
|
|||
sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
|
|||
#define EAXFR BITN7 |
|||
#define I2C_S1 BITN5 |
|||
#define I2C_S2 BITN4 |
|||
#define CMPO_S BITN3 |
|||
#define S4_S BITN2 |
|||
#define S3_S BITN1 |
|||
#define S2_S BITN0 |
|||
|
|||
//-----------------------------------------------------------------
|
|||
|
|||
//中断特殊功能寄存器
|
|||
sfr IE = 0xA8; //0000,0000 中断控制寄存器
|
|||
sbit EA = IE^7; |
|||
sbit ELVD = IE^6; |
|||
sbit EADC = IE^5; |
|||
sbit ES = IE^4; |
|||
sbit ET1 = IE^3; |
|||
sbit EX1 = IE^2; |
|||
sbit ET0 = IE^1; |
|||
sbit EX0 = IE^0; |
|||
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
|
|||
sbit PPCA = IP^7; |
|||
sbit PLVD = IP^6; |
|||
sbit PADC = IP^5; |
|||
sbit PS = IP^4; |
|||
sbit PT1 = IP^3; |
|||
sbit PX1 = IP^2; |
|||
sbit PT0 = IP^1; |
|||
sbit PX0 = IP^0; |
|||
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
|
|||
/// 不可位寻址
|
|||
#define ET4 BITN6 |
|||
#define ET3 BITN5 |
|||
#define ES4 BITN4 |
|||
#define ES3 BITN3 |
|||
#define ET2 BITN2 |
|||
#define ESPI BITN1 |
|||
#define ES2 BITN0 |
|||
|
|||
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
|
|||
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
|
|||
|
|||
//定时器特殊功能寄存器
|
|||
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
|
|||
sbit TF1 = TCON^7; |
|||
sbit TR1 = TCON^6; |
|||
sbit TF0 = TCON^5; |
|||
sbit TR0 = TCON^4; |
|||
sbit IE1 = TCON^3; |
|||
sbit IT1 = TCON^2; |
|||
sbit IE0 = TCON^1; |
|||
sbit IT0 = TCON^0; |
|||
sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
|
|||
sfr TL0 = 0x8A; //0000,0000 T0低字节
|
|||
sfr TL1 = 0x8B; //0000,0000 T1低字节
|
|||
sfr TH0 = 0x8C; //0000,0000 T0高字节
|
|||
sfr TH1 = 0x8D; //0000,0000 T1高字节
|
|||
sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
|
|||
sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
|
|||
sfr T4H = 0xD2; //0000,0000 T4高字节
|
|||
sfr T4L = 0xD3; //0000,0000 T4低字节
|
|||
sfr T3H = 0xD4; //0000,0000 T3高字节
|
|||
sfr T3L = 0xD5; //0000,0000 T3低字节
|
|||
sfr T2H = 0xD6; //0000,0000 T2高字节
|
|||
sfr T2L = 0xD7; //0000,0000 T2低字节
|
|||
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
|
|||
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
|
|||
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
|
|||
|
|||
//串行口特殊功能寄存器
|
|||
sfr SCON = 0x98; //0000,0000 串口1控制寄存器
|
|||
sbit SM0 = SCON^7; |
|||
sbit SM1 = SCON^6; |
|||
sbit SM2 = SCON^5; |
|||
sbit REN = SCON^4; |
|||
sbit TB8 = SCON^3; |
|||
sbit RB8 = SCON^2; |
|||
sbit TI = SCON^1; |
|||
sbit RI = SCON^0; |
|||
//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
|
|||
//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
|
|||
//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
|
|||
//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
|
|||
//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
|
|||
|
|||
sfr SBUF = 0x99; //Serial Data Buffer
|
|||
sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
|
|||
sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
|
|||
sfr SADDR = 0xA9; //Slave Address 0000,0000
|
|||
//-----------------------------------
|
|||
// 7 6 5 4 3 2 1 0 Reset Value
|
|||
sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
|
|||
#define S2SM0 BITN7 |
|||
#define S2ST4 BITN6 |
|||
#define S2SM2 BITN5 |
|||
#define S2REN BITN4 |
|||
#define S2TB8 BITN3 |
|||
#define S2RB8 BITN2 |
|||
#define S2TI BITN1 |
|||
#define S2RI BITN0 |
|||
|
|||
sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
|
|||
//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
|
|||
|
|||
//---------------------------------------------------------------
|
|||
sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
|
|||
#define S3SM0 BITN7 |
|||
#define S3ST4 BITN6 |
|||
#define S3SM2 BITN5 |
|||
#define S3REN BITN4 |
|||
#define S3TB8 BITN3 |
|||
#define S3RB8 BITN2 |
|||
#define S3TI BITN1 |
|||
#define S3RI BITN0 |
|||
|
|||
sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
|
|||
//---------------------------------------------------------------
|
|||
sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
|
|||
#define S4SM0 BITN7 |
|||
#define S4ST4 BITN6 |
|||
#define S4SM2 BITN5 |
|||
#define S4REN BITN4 |
|||
#define S4TB8 BITN3 |
|||
#define S4RB8 BITN2 |
|||
#define S4TI BITN1 |
|||
#define S4RI BITN0 |
|||
|
|||
sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
|
|||
|
|||
//ADC 特殊功能寄存器
|
|||
sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
|
|||
sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
|
|||
sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
|
|||
|
|||
//SPI 特殊功能寄存器
|
|||
sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
|
|||
sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
|
|||
sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
|
|||
|
|||
//IAP/ISP 特殊功能寄存器
|
|||
sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
|
|||
sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
|
|||
sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
|
|||
sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
|
|||
sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
|
|||
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
|
|||
|
|||
//PCA/PWM 特殊功能寄存器
|
|||
sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
|
|||
sbit CF = CCON^7; |
|||
sbit CR = CCON^6; |
|||
sbit CCF2 = CCON^2; |
|||
sbit CCF1 = CCON^1; |
|||
sbit CCF0 = CCON^0; |
|||
sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
|
|||
sfr CL = 0xE9; //0000,0000 PCA计数器低字节
|
|||
sfr CH = 0xF9; //0000,0000 PCA计数器高字节
|
|||
sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
|
|||
sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
|
|||
sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
|
|||
sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
|
|||
sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
|
|||
sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
|
|||
sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
|
|||
sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
|
|||
sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
|
|||
sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
|
|||
sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
|
|||
sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
|
|||
|
|||
//比较器特殊功能寄存器
|
|||
sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
|
|||
sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
|
|||
|
|||
|
|||
//sfr P_SW2 = 0xba;
|
|||
sfr PWMCFG = 0xf1; |
|||
sfr PWMIF = 0xf6; |
|||
sfr PWMFDCR = 0xf7; |
|||
sfr PWMCR = 0xfe; |
|||
|
|||
#define PWMC (*(unsigned int volatile xdata *)0xfff0) |
|||
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2) |
|||
#define TADCP (*(unsigned int volatile xdata *)0xfff3) |
|||
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00) |
|||
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02) |
|||
#define PWM0CR (*(unsigned char volatile xdata *)0xff04) |
|||
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05) |
|||
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10) |
|||
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12) |
|||
#define PWM1CR (*(unsigned char volatile xdata *)0xff14) |
|||
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15) |
|||
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20) |
|||
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22) |
|||
#define PWM2CR (*(unsigned char volatile xdata *)0xff24) |
|||
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25) |
|||
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30) |
|||
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32) |
|||
#define PWM3CR (*(unsigned char volatile xdata *)0xff34) |
|||
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35) |
|||
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40) |
|||
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42) |
|||
#define PWM4CR (*(unsigned char volatile xdata *)0xff44) |
|||
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45) |
|||
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50) |
|||
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52) |
|||
#define PWM5CR (*(unsigned char volatile xdata *)0xff54) |
|||
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55) |
|||
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60) |
|||
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62) |
|||
#define PWM6CR (*(unsigned char volatile xdata *)0xff64) |
|||
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65) |
|||
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70) |
|||
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72) |
|||
#define PWM7CR (*(unsigned char volatile xdata *)0xff74) |
|||
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75) |
|||
|
|||
|
|||
#define CKSEL (*(unsigned char volatile xdata *)0xfE00)//108@ST8.PDF
|
|||
#define MCLKODIV BIT4 |
|||
#define MCLKO_S BITN3 |
|||
#define MCLKSEL BIT0 |
|||
|
|||
#define CLKDIV (*(unsigned char volatile xdata *)0xfE01)//108@ST8.PDF
|
|||
#define IRC24MCR (*(unsigned char volatile xdata *)0xfE02)//108@ST8.PDF
|
|||
#define XOSCCR (*(unsigned char volatile xdata *)0xfE03)//108@ST8.PDF
|
|||
#define IRC32KCR (*(unsigned char volatile xdata *)0xfE04)//108@ST8.PDF
|
|||
|
|||
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
|
|||
|
|||
/* P3 */ |
|||
sbit RD = 0xB7; |
|||
sbit WR = 0xB6; |
|||
sbit T1 = 0xB5; |
|||
sbit T0 = 0xB4; |
|||
sbit INT1 = 0xB3; |
|||
sbit INT0 = 0xB2; |
|||
sbit TXD = 0xB1; |
|||
sbit RXD = 0xB0; |
|||
|
|||
|
|||
|
|||
|
|||
#if 0 |
|||
/// >>>>> add by cc
|
|||
|
|||
|
|||
//sbit P34=P3^4; //定义SDA数据线
|
|||
//sbit P35=P3^5; //定义SCL时钟线
|
|||
#define mBIT_1(X,N) X|= (1<<N) |
|||
#define mBIT_0(X,N) X&=~(1<<N) |
|||
#define mBIT_G(X,N) (X&(1<<N)) |
|||
/// add by cc 20181118
|
|||
#define D_IO_normal_P0(n); mBIT_0(P0M1,n);mBIT_0(P0M0,n); |
|||
#define D_IO_normal_P1(n); mBIT_0(P1M1,n);mBIT_0(P1M0,n); |
|||
#define D_IO_normal_P2(n); mBIT_0(P2M1,n);mBIT_0(P2M0,n); |
|||
#define D_IO_normal_P3(n); mBIT_0(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
#define D_IO_HighOut_P0(n); mBIT_0(P0M1,n);mBIT_1(P0M0,n); |
|||
#define D_IO_HighOut_P1(n); mBIT_0(P1M1,n);mBIT_1(P1M0,n); |
|||
#define D_IO_HighOut_P2(n); mBIT_0(P2M1,n);mBIT_1(P2M0,n); |
|||
#define D_IO_HighOut_P3(n); mBIT_0(P3M1,n);mBIT_1(P3M0,n); |
|||
//高阻状态
|
|||
|
|||
#define D_IO_HighR_P0(n); mBIT_1(P0M1,n);mBIT_0(P0M0,n); |
|||
#define D_IO_HighR_P1(n); mBIT_1(P1M1,n);mBIT_0(P1M0,n); |
|||
#define D_IO_HighR_P2(n); mBIT_1(P2M1,n);mBIT_0(P2M0,n); |
|||
#define D_IO_HighR_P3(n); mBIT_1(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
#define D_IO_OpenDrain_P0(n); mBIT_1(P0M1,n);mBIT_1(P0M0,n); |
|||
#define D_IO_OpenDrain_P1(n); mBIT_1(P1M1,n);mBIT_1(P1M0,n); |
|||
#define D_IO_OpenDrain_P2(n); mBIT_1(P2M1,n);mBIT_1(P2M0,n); |
|||
#define D_IO_OpenDrain_P3(n); mBIT_1(P3M1,n);mBIT_1(P3M0,n); |
|||
|
|||
|
|||
//高阻状态
|
|||
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n); |
|||
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n); |
|||
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n); |
|||
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n); |
|||
|
|||
|
|||
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
|
|||
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n); |
|||
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n); |
|||
#define NOP() _nop_() |
|||
|
|||
|
|||
|
|||
//added by cc
|
|||
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0; |
|||
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF; |
|||
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0; |
|||
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF; |
|||
|
|||
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0; |
|||
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF; |
|||
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0; |
|||
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF; |
|||
|
|||
//// n: BITN0---BITN7
|
|||
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#endif |
|||
|
|||
/***
|
|||
|
|||
#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n); |
|||
#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n); |
|||
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n); |
|||
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n); |
|||
|
|||
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n); |
|||
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n); |
|||
|
|||
#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n); |
|||
#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n); |
|||
|
|||
***/ |
|||
|
|||
|
|||
|
|||
|
|||
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4) |
|||
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4) |
|||
|
|||
#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4) |
|||
|
|||
|
|||
|
|||
|
|||
#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF) |
|||
#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF) |
|||
#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF) |
|||
|
|||
|
|||
|
|||
|
|||
//////
|
|||
|
|||
#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3); |
|||
#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3); |
|||
#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2); |
|||
#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2); |
|||
#define L0_INT1_OPEN() EX1 = 1; |
|||
#define L0_INT1_CLOSE() EX1 = 0; |
|||
#define L0_INT0_OPEN() EX0 = 1; |
|||
#define L0_INT0_CLOSE() EX0 = 0; |
|||
|
|||
#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
|
|||
#define D_ISR_timer0 1 |
|||
#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
|
|||
#define D_ISR_timer1 3 |
|||
#define D_ISR_int2 10 /////只有下降沿
|
|||
#define D_ISR_int3 11 /////只有下降沿
|
|||
#define D_SERVE_UART 4 |
|||
#define D_ISR_int4 16 /////只有下降沿
|
|||
|
|||
#if 0 |
|||
#define L0_TIMER1_start() TR1 = 1; |
|||
#define L0_TIMER1_end() TR1 = 0; |
|||
|
|||
|
|||
#define L0_TIMER1_isr_OPEN() ET1 = 1; |
|||
#define L0_TIMER1_isr_CLOSE() ET1 = 0; |
|||
|
|||
|
|||
#else |
|||
|
|||
#define L0_TIMER1_start() ET1 = 1; |
|||
#define L0_TIMER1_end() ET1 = 0; |
|||
|
|||
|
|||
#define L0_TIMER1_isr_OPEN() TR1 = 1; |
|||
#define L0_TIMER1_isr_CLOSE() TR1 = 0; |
|||
|
|||
|
|||
#endif |
|||
|
|||
/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
|
|||
|
|||
///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
|
|||
///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
|
|||
#endif //STC_stc8a8k
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -1,466 +0,0 @@ |
|||
#ifndef __STC15F2K60S2_H_ |
|||
#define __STC15F2K60S2_H_ |
|||
// stc_stc15w.h
|
|||
#include<intrins.h> |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
|
|||
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
|
|||
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
|
|||
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//包含本头文件后,不用另外再包含"REG51.H"
|
|||
|
|||
//内核特殊功能寄存器 // 复位值 描述
|
|||
sfr ACC = 0xE0; //0000,0000 累加器Accumulator
|
|||
sfr B = 0xF0; //0000,0000 B寄存器
|
|||
sfr PSW = 0xD0; //0000,0000 程序状态字
|
|||
sbit CY = PSW^7; |
|||
sbit AC = PSW^6; |
|||
sbit F0 = PSW^5; |
|||
sbit RS1 = PSW^4; |
|||
sbit RS0 = PSW^3; |
|||
sbit OV = PSW^2; |
|||
sbit P = PSW^0; |
|||
sfr SP = 0x81; //0000,0111 堆栈指针
|
|||
sfr DPL = 0x82; //0000,0000 数据指针低字节
|
|||
sfr DPH = 0x83; //0000,0000 数据指针高字节
|
|||
|
|||
//I/O 口特殊功能寄存器
|
|||
sfr P0 = 0x80; //1111,1111 端口0
|
|||
sbit P00 = P0^0; |
|||
sbit P01 = P0^1; |
|||
sbit P02 = P0^2; |
|||
sbit P03 = P0^3; |
|||
sbit P04 = P0^4; |
|||
sbit P05 = P0^5; |
|||
sbit P06 = P0^6; |
|||
sbit P07 = P0^7; |
|||
sfr P1 = 0x90; //1111,1111 端口1
|
|||
sbit P10 = P1^0; |
|||
sbit P11 = P1^1; |
|||
sbit P12 = P1^2; |
|||
sbit P13 = P1^3; |
|||
sbit P14 = P1^4; |
|||
sbit P15 = P1^5; |
|||
sbit P16 = P1^6; |
|||
sbit P17 = P1^7; |
|||
sfr P2 = 0xA0; //1111,1111 端口2
|
|||
sbit P20 = P2^0; |
|||
sbit P21 = P2^1; |
|||
sbit P22 = P2^2; |
|||
sbit P23 = P2^3; |
|||
sbit P24 = P2^4; |
|||
sbit P25 = P2^5; |
|||
sbit P26 = P2^6; |
|||
sbit P27 = P2^7; |
|||
sfr P3 = 0xB0; //1111,1111 端口3
|
|||
sbit P30 = P3^0; |
|||
sbit P31 = P3^1; |
|||
sbit P32 = P3^2; |
|||
sbit P33 = P3^3; |
|||
sbit P34 = P3^4; |
|||
sbit P35 = P3^5; |
|||
sbit P36 = P3^6; |
|||
sbit P37 = P3^7; |
|||
sfr P4 = 0xC0; //1111,1111 端口4
|
|||
sbit P40 = P4^0; |
|||
sbit P41 = P4^1; |
|||
sbit P42 = P4^2; |
|||
sbit P43 = P4^3; |
|||
sbit P44 = P4^4; |
|||
sbit P45 = P4^5; |
|||
sbit P46 = P4^6; |
|||
sbit P47 = P4^7; |
|||
sfr P5 = 0xC8; //xxxx,1111 端口5
|
|||
sbit P50 = P5^0; |
|||
sbit P51 = P5^1; |
|||
sbit P52 = P5^2; |
|||
sbit P53 = P5^3; |
|||
sbit P54 = P5^4; |
|||
sbit P55 = P5^5; |
|||
sbit P56 = P5^6; |
|||
sbit P57 = P5^7; |
|||
sfr P6 = 0xE8; //0000,0000 端口6
|
|||
sbit P60 = P6^0; |
|||
sbit P61 = P6^1; |
|||
sbit P62 = P6^2; |
|||
sbit P63 = P6^3; |
|||
sbit P64 = P6^4; |
|||
sbit P65 = P6^5; |
|||
sbit P66 = P6^6; |
|||
sbit P67 = P6^7; |
|||
sfr P7 = 0xF8; //0000,0000 端口7
|
|||
sbit P70 = P7^0; |
|||
sbit P71 = P7^1; |
|||
sbit P72 = P7^2; |
|||
sbit P73 = P7^3; |
|||
sbit P74 = P7^4; |
|||
sbit P75 = P7^5; |
|||
sbit P76 = P7^6; |
|||
sbit P77 = P7^7; |
|||
sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0
|
|||
sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1
|
|||
sfr P1M0 = 0x92; //0000,0000 端口1模式寄存器0
|
|||
sfr P1M1 = 0x91; //0000,0000 端口1模式寄存器1
|
|||
sfr P2M0 = 0x96; //0000,0000 端口2模式寄存器0
|
|||
sfr P2M1 = 0x95; //0000,0000 端口2模式寄存器1
|
|||
sfr P3M0 = 0xB2; //0000,0000 端口3模式寄存器0
|
|||
sfr P3M1 = 0xB1; //0000,0000 端口3模式寄存器1
|
|||
sfr P4M0 = 0xB4; //0000,0000 端口4模式寄存器0
|
|||
sfr P4M1 = 0xB3; //0000,0000 端口4模式寄存器1
|
|||
sfr P5M0 = 0xCA; //0000,0000 端口5模式寄存器0
|
|||
sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1
|
|||
sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0
|
|||
sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1
|
|||
sfr P7M0 = 0xE2; //0000,0000 端口7模式寄存器0
|
|||
sfr P7M1 = 0xE1; //0000,0000 端口7模式寄存器1
|
|||
|
|||
//系统管理特殊功能寄存器
|
|||
sfr PCON = 0x87; //0001,0000 电源控制寄存器
|
|||
sfr AUXR = 0x8E; //0000,0000 辅助寄存器
|
|||
|
|||
#define TOx12 BITN7 |
|||
#define T1x12 BITN6 |
|||
#define UART_M0x6 BITN5 //串口1模式0速度 =0 12倍 = 1 两倍
|
|||
#define T2R BITN4 //定时器2 运行 =1
|
|||
#define T2_C BITN3 //定时器/计数器选择
|
|||
#define T2x12 BITN2 |
|||
#define EXTRAM BITN1 |
|||
#define S1ST2 BITN0 //串口1选择定时器1 =0 选择定时器2 =1
|
|||
|
|||
|
|||
|
|||
|
|||
sfr AUXR1 = 0xA2; //0000,0000 辅助寄存器1
|
|||
sfr P_SW1 = 0xA2; //0000,0000 外设端口切换寄存器1
|
|||
sfr CLK_DIV = 0x97; //0000,0000 时钟分频控制寄存器
|
|||
sfr BUS_SPEED = 0xA1; //xx10,x011 总线速度控制寄存器
|
|||
sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器
|
|||
sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器
|
|||
|
|||
//中断特殊功能寄存器
|
|||
sfr IE = 0xA8; //0000,0000 中断控制寄存器
|
|||
sbit EA = IE^7; |
|||
sbit ELVD = IE^6; |
|||
sbit EADC = IE^5; |
|||
sbit ES = IE^4; |
|||
sbit ET1 = IE^3; |
|||
sbit EX1 = IE^2; |
|||
sbit ET0 = IE^1; |
|||
sbit EX0 = IE^0; |
|||
sfr IP = 0xB8; //0000,0000 中断优先级寄存器
|
|||
sbit PPCA = IP^7; |
|||
sbit PLVD = IP^6; |
|||
sbit PADC = IP^5; |
|||
sbit PS = IP^4; |
|||
sbit PT1 = IP^3; |
|||
sbit PX1 = IP^2; |
|||
sbit PT0 = IP^1; |
|||
sbit PX0 = IP^0; |
|||
sfr IE2 = 0xAF; //0000,0000 中断控制寄存器2
|
|||
/// 不可位寻址
|
|||
#define ET4 BITN6 |
|||
#define ET3 BITN5 |
|||
#define ES4 BITN4 |
|||
#define ES3 BITN3 |
|||
#define ET2 BITN2 |
|||
#define ESPI BITN1 |
|||
#define ES2 BITN0 |
|||
|
|||
sfr IP2 = 0xB5; //xxxx,xx00 中断优先级寄存器2
|
|||
sfr INT_CLKO = 0x8F; //0000,0000 外部中断与时钟输出控制寄存器
|
|||
|
|||
//定时器特殊功能寄存器
|
|||
sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器
|
|||
sbit TF1 = TCON^7; |
|||
sbit TR1 = TCON^6; |
|||
sbit TF0 = TCON^5; |
|||
sbit TR0 = TCON^4; |
|||
sbit IE1 = TCON^3; |
|||
sbit IT1 = TCON^2; |
|||
sbit IE0 = TCON^1; |
|||
sbit IT0 = TCON^0; |
|||
sfr TMOD = 0x89; //0000,0000 T0/T1模式寄存器
|
|||
sfr TL0 = 0x8A; //0000,0000 T0低字节
|
|||
sfr TL1 = 0x8B; //0000,0000 T1低字节
|
|||
sfr TH0 = 0x8C; //0000,0000 T0高字节
|
|||
sfr TH1 = 0x8D; //0000,0000 T1高字节
|
|||
sfr T4T3M = 0xD1; //0000,0000 T3/T4模式寄存器
|
|||
sfr T3T4M = 0xD1; //0000,0000 T3/T4模式寄存器
|
|||
sfr T4H = 0xD2; //0000,0000 T4高字节
|
|||
sfr T4L = 0xD3; //0000,0000 T4低字节
|
|||
sfr T3H = 0xD4; //0000,0000 T3高字节
|
|||
sfr T3L = 0xD5; //0000,0000 T3低字节
|
|||
sfr T2H = 0xD6; //0000,0000 T2高字节
|
|||
sfr T2L = 0xD7; //0000,0000 T2低字节
|
|||
sfr WKTCL = 0xAA; //0000,0000 掉电唤醒定时器低字节
|
|||
sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节
|
|||
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
|
|||
|
|||
//串行口特殊功能寄存器
|
|||
sfr SCON = 0x98; //0000,0000 串口1控制寄存器
|
|||
sbit SM0 = SCON^7; |
|||
sbit SM1 = SCON^6; |
|||
sbit SM2 = SCON^5; |
|||
sbit REN = SCON^4; |
|||
sbit TB8 = SCON^3; |
|||
sbit RB8 = SCON^2; |
|||
sbit TI = SCON^1; |
|||
sbit RI = SCON^0; |
|||
//sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器
|
|||
//sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器
|
|||
//sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器
|
|||
//sfr SADDR = 0xA9; //0000,0000 从机地址寄存器
|
|||
//sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器
|
|||
|
|||
sfr SBUF = 0x99; //Serial Data Buffer
|
|||
sfr SBUF0 = 0x99; //Serial Data Buffer xxxx,xxxx
|
|||
sfr SADEN = 0xB9; //Slave Address Mask 0000,0000
|
|||
sfr SADDR = 0xA9; //Slave Address 0000,0000
|
|||
//-----------------------------------
|
|||
// 7 6 5 4 3 2 1 0 Reset Value
|
|||
sfr S2CON = 0x9A; //S2 Control S2SM0 S2SM1 S2SM2 S2REN S2TB8 S2RB8 S2TI S2RI 00000000B
|
|||
#define S2SM0 BITN7 |
|||
#define S2ST4 BITN6 |
|||
#define S2SM2 BITN5 |
|||
#define S2REN BITN4 |
|||
#define S2TB8 BITN3 |
|||
#define S2RB8 BITN2 |
|||
#define S2TI BITN1 |
|||
#define S2RI BITN0 |
|||
|
|||
sfr S2BUF = 0x9B; //S2 Serial Buffer xxxx,xxxx
|
|||
//sfr BRT = 0x9C; //S2 Baud-Rate Timer 0000,0000
|
|||
|
|||
//---------------------------------------------------------------
|
|||
sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器
|
|||
#define S3SM0 BITN7 |
|||
#define S3ST4 BITN6 |
|||
#define S3SM2 BITN5 |
|||
#define S3REN BITN4 |
|||
#define S3TB8 BITN3 |
|||
#define S3RB8 BITN2 |
|||
#define S3TI BITN1 |
|||
#define S3RI BITN0 |
|||
|
|||
sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器
|
|||
//---------------------------------------------------------------
|
|||
sfr S4CON = 0x84; //0000,0000 串口4控制寄存器
|
|||
#define S4SM0 BITN7 |
|||
#define S4ST4 BITN6 |
|||
#define S4SM2 BITN5 |
|||
#define S4REN BITN4 |
|||
#define S4TB8 BITN3 |
|||
#define S4RB8 BITN2 |
|||
#define S4TI BITN1 |
|||
#define S4RI BITN0 |
|||
|
|||
sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器
|
|||
|
|||
//ADC 特殊功能寄存器
|
|||
sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器
|
|||
sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位
|
|||
sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位
|
|||
|
|||
//SPI 特殊功能寄存器
|
|||
sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器
|
|||
sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器
|
|||
sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器
|
|||
|
|||
//IAP/ISP 特殊功能寄存器
|
|||
sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器
|
|||
sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节
|
|||
sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节
|
|||
sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器
|
|||
sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器
|
|||
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
|
|||
|
|||
//PCA/PWM 特殊功能寄存器
|
|||
sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器
|
|||
sbit CF = CCON^7; |
|||
sbit CR = CCON^6; |
|||
sbit CCF2 = CCON^2; |
|||
sbit CCF1 = CCON^1; |
|||
sbit CCF0 = CCON^0; |
|||
sfr CMOD = 0xD9; //0xxx,x000 PCA 工作模式寄存器
|
|||
sfr CL = 0xE9; //0000,0000 PCA计数器低字节
|
|||
sfr CH = 0xF9; //0000,0000 PCA计数器高字节
|
|||
sfr CCAPM0 = 0xDA; //0000,0000 PCA模块0的PWM寄存器
|
|||
sfr CCAPM1 = 0xDB; //0000,0000 PCA模块1的PWM寄存器
|
|||
sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器
|
|||
sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节
|
|||
sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节
|
|||
sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节
|
|||
sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器
|
|||
sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器
|
|||
sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器
|
|||
sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节
|
|||
sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节
|
|||
sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节
|
|||
|
|||
//比较器特殊功能寄存器
|
|||
sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1
|
|||
sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2
|
|||
|
|||
//增强型PWM波形发生器特殊功能寄存器
|
|||
sfr PWMCFG = 0xf1; //x000,0000 PWM配置寄存器
|
|||
sfr PWMCR = 0xf5; //0000,0000 PWM控制寄存器
|
|||
sfr PWMIF = 0xf6; //x000,0000 PWM中断标志寄存器
|
|||
sfr PWMFDCR = 0xf7; //xx00,0000 PWM外部异常检测控制寄存器
|
|||
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
#define PWMC (*(unsigned int volatile xdata *)0xfff0) |
|||
#define PWMCH (*(unsigned char volatile xdata *)0xfff0) |
|||
#define PWMCL (*(unsigned char volatile xdata *)0xfff1) |
|||
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2) |
|||
#define PWM2T1 (*(unsigned int volatile xdata *)0xff00) |
|||
#define PWM2T1H (*(unsigned char volatile xdata *)0xff00) |
|||
#define PWM2T1L (*(unsigned char volatile xdata *)0xff01) |
|||
#define PWM2T2 (*(unsigned int volatile xdata *)0xff02) |
|||
#define PWM2T2H (*(unsigned char volatile xdata *)0xff02) |
|||
#define PWM2T2L (*(unsigned char volatile xdata *)0xff03) |
|||
#define PWM2CR (*(unsigned char volatile xdata *)0xff04) |
|||
#define PWM3T1 (*(unsigned int volatile xdata *)0xff10) |
|||
#define PWM3T1H (*(unsigned char volatile xdata *)0xff10) |
|||
#define PWM3T1L (*(unsigned char volatile xdata *)0xff11) |
|||
#define PWM3T2 (*(unsigned int volatile xdata *)0xff12) |
|||
#define PWM3T2H (*(unsigned char volatile xdata *)0xff12) |
|||
#define PWM3T2L (*(unsigned char volatile xdata *)0xff13) |
|||
#define PWM3CR (*(unsigned char volatile xdata *)0xff14) |
|||
#define PWM4T1 (*(unsigned int volatile xdata *)0xff20) |
|||
#define PWM4T1H (*(unsigned char volatile xdata *)0xff20) |
|||
#define PWM4T1L (*(unsigned char volatile xdata *)0xff21) |
|||
#define PWM4T2 (*(unsigned int volatile xdata *)0xff22) |
|||
#define PWM4T2H (*(unsigned char volatile xdata *)0xff22) |
|||
#define PWM4T2L (*(unsigned char volatile xdata *)0xff23) |
|||
#define PWM4CR (*(unsigned char volatile xdata *)0xff24) |
|||
#define PWM5T1 (*(unsigned int volatile xdata *)0xff30) |
|||
#define PWM5T1H (*(unsigned char volatile xdata *)0xff30) |
|||
#define PWM5T1L (*(unsigned char volatile xdata *)0xff31) |
|||
#define PWM5T2 (*(unsigned int volatile xdata *)0xff32) |
|||
#define PWM5T2H (*(unsigned char volatile xdata *)0xff32) |
|||
#define PWM5T2L (*(unsigned char volatile xdata *)0xff33) |
|||
#define PWM5CR (*(unsigned char volatile xdata *)0xff34) |
|||
#define PWM6T1 (*(unsigned int volatile xdata *)0xff40) |
|||
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40) |
|||
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41) |
|||
#define PWM6T2 (*(unsigned int volatile xdata *)0xff42) |
|||
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42) |
|||
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43) |
|||
#define PWM6CR (*(unsigned char volatile xdata *)0xff44) |
|||
#define PWM7T1 (*(unsigned int volatile xdata *)0xff50) |
|||
#define PWM7T1H (*(unsigned char volatile xdata *)0xff50) |
|||
#define PWM7T1L (*(unsigned char volatile xdata *)0xff51) |
|||
#define PWM7T2 (*(unsigned int volatile xdata *)0xff52) |
|||
#define PWM7T2H (*(unsigned char volatile xdata *)0xff52) |
|||
#define PWM7T2L (*(unsigned char volatile xdata *)0xff53) |
|||
#define PWM7CR (*(unsigned char volatile xdata *)0xff54) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
|
|||
|
|||
/* P3 */ |
|||
sbit RD = 0xB7; |
|||
sbit WR = 0xB6; |
|||
sbit T1 = 0xB5; |
|||
sbit T0 = 0xB4; |
|||
sbit INT1 = 0xB3; |
|||
sbit INT0 = 0xB2; |
|||
sbit TXD = 0xB1; |
|||
sbit RXD = 0xB0; |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
/// >>>>> add by cc
|
|||
|
|||
|
|||
//sbit P34=P3^4; //定义SDA数据线
|
|||
//sbit P35=P3^5; //定义SCL时钟线
|
|||
#define mBIT_1(X,N) X|= (1<<N) |
|||
#define mBIT_0(X,N) X&=~(1<<N) |
|||
#define mBIT_G(X,N) (X&(1<<N)) |
|||
|
|||
//高阻状态
|
|||
#define P0_conf_in(n) mBIT_1(P0M1,n);mBIT_0(P0M0,n); |
|||
#define P1_conf_in(n) mBIT_1(P1M1,n);mBIT_0(P1M0,n); |
|||
#define P2_conf_in(n) mBIT_1(P2M1,n);mBIT_0(P2M0,n); |
|||
#define P2_conf_port(n) mBIT_0(P2M1,n);mBIT_0(P2M0,n); |
|||
|
|||
|
|||
#define P3_conf_in(n) mBIT_1(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
#define P3_conf_port(n) mBIT_0(P3M1,n);mBIT_0(P3M0,n); |
|||
|
|||
|
|||
#define P4_conf_in(n) mBIT_1(P4M1,n);mBIT_0(P4M0,n); |
|||
#define P5_conf_in(n) mBIT_1(P5M1,n);mBIT_0(P5M0,n); |
|||
#define NOP() _nop_() |
|||
|
|||
|
|||
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0; |
|||
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF; |
|||
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0; |
|||
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF; |
|||
|
|||
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0; |
|||
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF; |
|||
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0; |
|||
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF; |
|||
|
|||
//// n: BITN0---BITN7
|
|||
#define D_stdIO_P0(BITN) BITN_0(P0M1,BITN);BITN_0(P0M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P0(BITN) BITN_0(P0M1,BITN);BITN_1(P0M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P0(BITN) BITN_1(P0M1,BITN);BITN_0(P0M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P0(BITN) BITN_1(P0M1,BITN);BITN_1(P0M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P1(BITN) BITN_0(P1M1,BITN);BITN_0(P1M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P1(BITN) BITN_0(P1M1,BITN);BITN_1(P1M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P1(BITN) BITN_1(P1M1,BITN);BITN_0(P1M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P1(BITN) BITN_1(P1M1,BITN);BITN_1(P1M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P2(BITN) BITN_0(P2M1,BITN);BITN_0(P2M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P2(BITN) BITN_0(P2M1,BITN);BITN_1(P2M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P2(BITN) BITN_1(P2M1,BITN);BITN_0(P2M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P2(BITN) BITN_1(P2M1,BITN);BITN_1(P2M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P3(BITN) BITN_0(P3M1,BITN);BITN_0(P3M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P3(BITN) BITN_0(P3M1,BITN);BITN_1(P3M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P3(BITN) BITN_1(P3M1,BITN);BITN_0(P3M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P3(BITN) BITN_1(P3M1,BITN);BITN_1(P3M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P4(BITN) BITN_0(P4M1,BITN);BITN_0(P4M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P4(BITN) BITN_0(P4M1,BITN);BITN_1(P4M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P4(BITN) BITN_1(P4M1,BITN);BITN_0(P4M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P4(BITN) BITN_1(P4M1,BITN);BITN_1(P4M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P5(BITN) BITN_0(P5M1,BITN);BITN_0(P5M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P5(BITN) BITN_0(P5M1,BITN);BITN_1(P5M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P5(BITN) BITN_1(P5M1,BITN);BITN_0(P5M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P5(BITN) BITN_1(P5M1,BITN);BITN_1(P5M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P6(BITN) BITN_0(P6M1,BITN);BITN_0(P6M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P6(BITN) BITN_0(P6M1,BITN);BITN_1(P6M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P6(BITN) BITN_1(P6M1,BITN);BITN_0(P6M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P6(BITN) BITN_1(P6M1,BITN);BITN_1(P6M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P7(BITN) BITN_0(P7M1,BITN);BITN_0(P7M0,BITN); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P7(BITN) BITN_0(P7M1,BITN);BITN_1(P7M0,BITN); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P7(BITN) BITN_1(P7M1,BITN);BITN_0(P7M0,BITN); /////////10 高阻
|
|||
#define D_OpenD_P7(BITN) BITN_1(P7M1,BITN);BITN_1(P7M0,BITN); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
|
|||
#endif |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -1,746 +0,0 @@ |
|||
#ifndef __STC8G_H_ |
|||
#define __STC8G_H_ |
|||
|
|||
// STC_stc8a8k.h
|
|||
#include<intrins.h> |
|||
/////////////////////////////////////////////////
|
|||
//注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
|
|||
// 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
|
|||
//相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
|
|||
// P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//包含本头文件后,不用另外再包含"REG51.H"
|
|||
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//包含本头文件后,不用另外再包含"REG51.H"
|
|||
|
|||
sfr P0 = 0x80; |
|||
sbit P00 = P0^0; |
|||
sbit P01 = P0^1; |
|||
sbit P02 = P0^2; |
|||
sbit P03 = P0^3; |
|||
sbit P04 = P0^4; |
|||
sbit P05 = P0^5; |
|||
sbit P06 = P0^6; |
|||
sbit P07 = P0^7; |
|||
sfr SP = 0x81; |
|||
sfr DPL = 0x82; |
|||
sfr DPH = 0x83; |
|||
sfr S4CON = 0x84; |
|||
sfr S4BUF = 0x85; |
|||
sfr PCON = 0x87; |
|||
sfr TCON = 0x88; |
|||
sbit TF1 = TCON^7; |
|||
sbit TR1 = TCON^6; |
|||
sbit TF0 = TCON^5; |
|||
sbit TR0 = TCON^4; |
|||
sbit IE1 = TCON^3; |
|||
sbit IT1 = TCON^2; |
|||
sbit IE0 = TCON^1; |
|||
sbit IT0 = TCON^0; |
|||
sfr TMOD = 0x89; |
|||
sfr TL0 = 0x8A; |
|||
sfr TL1 = 0x8B; |
|||
sfr TH0 = 0x8C; |
|||
sfr TH1 = 0x8D; |
|||
sfr AUXR = 0x8E; |
|||
sfr INTCLKO = 0x8F; |
|||
sfr P1 = 0x90; |
|||
sbit P10 = P1^0; |
|||
sbit P11 = P1^1; |
|||
sbit P12 = P1^2; |
|||
sbit P13 = P1^3; |
|||
sbit P14 = P1^4; |
|||
sbit P15 = P1^5; |
|||
sbit P16 = P1^6; |
|||
sbit P17 = P1^7; |
|||
sfr P1M1 = 0x91; |
|||
sfr P1M0 = 0x92; |
|||
sfr P0M1 = 0x93; |
|||
sfr P0M0 = 0x94; |
|||
sfr P2M1 = 0x95; |
|||
sfr P2M0 = 0x96; |
|||
sfr SCON = 0x98; |
|||
sbit SM0 = SCON^7; |
|||
sbit SM1 = SCON^6; |
|||
sbit SM2 = SCON^5; |
|||
sbit REN = SCON^4; |
|||
sbit TB8 = SCON^3; |
|||
sbit RB8 = SCON^2; |
|||
sbit TI = SCON^1; |
|||
sbit RI = SCON^0; |
|||
sfr SBUF = 0x99; |
|||
sfr S2CON = 0x9A; |
|||
sfr S2BUF = 0x9B; |
|||
sfr IRCBAND = 0x9D; |
|||
sfr LIRTRIM = 0x9E; |
|||
sfr IRTRIM = 0x9F; |
|||
sfr P2 = 0xA0; |
|||
sbit P20 = P2^0; |
|||
sbit P21 = P2^1; |
|||
sbit P22 = P2^2; |
|||
sbit P23 = P2^3; |
|||
sbit P24 = P2^4; |
|||
sbit P25 = P2^5; |
|||
sbit P26 = P2^6; |
|||
sbit P27 = P2^7; |
|||
sfr P_SW1 = 0xA2; |
|||
sfr IE = 0xA8; |
|||
sbit EA = IE^7; |
|||
sbit ELVD = IE^6; |
|||
sbit EADC = IE^5; |
|||
sbit ES = IE^4; |
|||
sbit ET1 = IE^3; |
|||
sbit EX1 = IE^2; |
|||
sbit ET0 = IE^1; |
|||
sbit EX0 = IE^0; |
|||
sfr SADDR = 0xA9; |
|||
sfr WKTCL = 0xAA; |
|||
sfr WKTCH = 0xAB; |
|||
sfr S3CON = 0xAC; |
|||
sfr S3BUF = 0xAD; |
|||
sfr TA = 0xAE; |
|||
sfr IE2 = 0xAF; |
|||
sfr P3 = 0xB0; |
|||
sbit P30 = P3^0; |
|||
sbit P31 = P3^1; |
|||
sbit P32 = P3^2; |
|||
sbit P33 = P3^3; |
|||
sbit P34 = P3^4; |
|||
sbit P35 = P3^5; |
|||
sbit P36 = P3^6; |
|||
sbit P37 = P3^7; |
|||
sfr P3M1 = 0xB1; |
|||
sfr P3M0 = 0xB2; |
|||
sfr P4M1 = 0xB3; |
|||
sfr P4M0 = 0xB4; |
|||
sfr IP2 = 0xB5; |
|||
sfr IP2H = 0xB6; |
|||
sfr IPH = 0xB7; |
|||
sfr IP = 0xB8; |
|||
sbit PPCA = IP^7; |
|||
sbit PLVD = IP^6; |
|||
sbit PADC = IP^5; |
|||
sbit PS = IP^4; |
|||
sbit PT1 = IP^3; |
|||
sbit PX1 = IP^2; |
|||
sbit PT0 = IP^1; |
|||
sbit PX0 = IP^0; |
|||
sfr SADEN = 0xB9; |
|||
sfr P_SW2 = 0xBA; |
|||
sfr ADC_CONTR = 0xBC; |
|||
sfr ADC_RES = 0xBD; |
|||
sfr ADC_RESL = 0xBE; |
|||
sfr P4 = 0xC0; |
|||
sbit P40 = P4^0; |
|||
sbit P41 = P4^1; |
|||
sbit P42 = P4^2; |
|||
sbit P43 = P4^3; |
|||
sbit P44 = P4^4; |
|||
sbit P45 = P4^5; |
|||
sbit P46 = P4^6; |
|||
sbit P47 = P4^7; |
|||
sfr WDT_CONTR = 0xC1; |
|||
sfr IAP_DATA = 0xC2; |
|||
sfr IAP_ADDRH = 0xC3; |
|||
sfr IAP_ADDRL = 0xC4; |
|||
sfr IAP_CMD = 0xC5; |
|||
sfr IAP_TRIG = 0xC6; |
|||
sfr IAP_CONTR = 0xC7; |
|||
sfr P5 = 0xC8; |
|||
sbit P50 = P5^0; |
|||
sbit P51 = P5^1; |
|||
sbit P52 = P5^2; |
|||
sbit P53 = P5^3; |
|||
sbit P54 = P5^4; |
|||
sbit P55 = P5^5; |
|||
sbit P56 = P5^6; |
|||
sbit P57 = P5^7; |
|||
sfr P5M1 = 0xC9; |
|||
sfr P5M0 = 0xCA; |
|||
sfr SPSTAT = 0xCD; |
|||
sfr SPCTL = 0xCE; |
|||
sfr SPDAT = 0xCF; |
|||
sfr PSW = 0xD0; |
|||
sbit CY = PSW^7; |
|||
sbit AC = PSW^6; |
|||
sbit F0 = PSW^5; |
|||
sbit RS1 = PSW^4; |
|||
sbit RS0 = PSW^3; |
|||
sbit OV = PSW^2; |
|||
sbit P = PSW^0; |
|||
sfr T4T3M = 0xD1; |
|||
sfr T4H = 0xD2; |
|||
sfr T4L = 0xD3; |
|||
sfr T3H = 0xD4; |
|||
sfr T3L = 0xD5; |
|||
sfr T2H = 0xD6; |
|||
sfr T2L = 0xD7; |
|||
sfr CCON = 0xD8; |
|||
sbit CF = CCON^7; |
|||
sbit CR = CCON^6; |
|||
sbit CCF2 = CCON^2; |
|||
sbit CCF1 = CCON^1; |
|||
sbit CCF0 = CCON^0; |
|||
sfr CMOD = 0xD9; |
|||
sfr CCAPM0 = 0xDA; |
|||
sfr CCAPM1 = 0xDB; |
|||
sfr CCAPM2 = 0xDC; |
|||
sfr ADCCFG = 0xDE; |
|||
sfr IP3 = 0xDF; |
|||
sfr ACC = 0xE0; |
|||
sfr DPS = 0xE3; |
|||
sfr DPL1 = 0xE4; |
|||
sfr DPH1 = 0xE5; |
|||
sfr CMPCR1 = 0xE6; |
|||
sfr CMPCR2 = 0xE7; |
|||
sfr CL = 0xE9; |
|||
sfr CCAP0L = 0xEA; |
|||
sfr CCAP1L = 0xEB; |
|||
sfr CCAP2L = 0xEC; |
|||
sfr IP3H = 0xEE; |
|||
sfr AUXINTIF = 0xEF; |
|||
sfr B = 0xF0; |
|||
sfr PWMSET = 0xF1; |
|||
sfr PCA_PWM0 = 0xF2; |
|||
sfr PCA_PWM1 = 0xF3; |
|||
sfr PCA_PWM2 = 0xF4; |
|||
sfr IAP_TPS = 0xF5; |
|||
sfr PWMCFG01 = 0xF6; |
|||
sfr PWMCFG23 = 0xF7; |
|||
sfr CH = 0xF9; |
|||
sfr CCAP0H = 0xFA; |
|||
sfr CCAP1H = 0xFB; |
|||
sfr CCAP2H = 0xFC; |
|||
sfr PWMCFG45 = 0xFE; |
|||
sfr RSTCFG = 0xFF; |
|||
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
|
|||
#define CKSEL (*(unsigned char volatile xdata *)0xFE00) |
|||
#define CLKDIV (*(unsigned char volatile xdata *)0xFE01) |
|||
#define HIRCCR (*(unsigned char volatile xdata *)0xFE02) |
|||
#define XOSCCR (*(unsigned char volatile xdata *)0xFE03) |
|||
#define IRC32KCR (*(unsigned char volatile xdata *)0xFE04) |
|||
#define MCLKOCR (*(unsigned char volatile xdata *)0xFE05) |
|||
#define IRCDB (*(unsigned char volatile xdata *)0xFE06) |
|||
|
|||
#define P0PU (*(unsigned char volatile xdata *)0xFE10) |
|||
#define P1PU (*(unsigned char volatile xdata *)0xFE11) |
|||
#define P2PU (*(unsigned char volatile xdata *)0xFE12) |
|||
#define P3PU (*(unsigned char volatile xdata *)0xFE13) |
|||
#define P4PU (*(unsigned char volatile xdata *)0xFE14) |
|||
#define P5PU (*(unsigned char volatile xdata *)0xFE15) |
|||
#define P0NCS (*(unsigned char volatile xdata *)0xFE18) |
|||
#define P1NCS (*(unsigned char volatile xdata *)0xFE19) |
|||
#define P2NCS (*(unsigned char volatile xdata *)0xFE1A) |
|||
#define P3NCS (*(unsigned char volatile xdata *)0xFE1B) |
|||
#define P4NCS (*(unsigned char volatile xdata *)0xFE1C) |
|||
#define P5NCS (*(unsigned char volatile xdata *)0xFE1D) |
|||
#define P0SR (*(unsigned char volatile xdata *)0xFE20) |
|||
#define P1SR (*(unsigned char volatile xdata *)0xFE21) |
|||
#define P2SR (*(unsigned char volatile xdata *)0xFE22) |
|||
#define P3SR (*(unsigned char volatile xdata *)0xFE23) |
|||
#define P4SR (*(unsigned char volatile xdata *)0xFE24) |
|||
#define P5SR (*(unsigned char volatile xdata *)0xFE25) |
|||
#define P0DR (*(unsigned char volatile xdata *)0xFE28) |
|||
#define P1DR (*(unsigned char volatile xdata *)0xFE29) |
|||
#define P2DR (*(unsigned char volatile xdata *)0xFE2A) |
|||
#define P3DR (*(unsigned char volatile xdata *)0xFE2B) |
|||
#define P4DR (*(unsigned char volatile xdata *)0xFE2C) |
|||
#define P5DR (*(unsigned char volatile xdata *)0xFE2D) |
|||
#define P0IE (*(unsigned char volatile xdata *)0xFE30) |
|||
#define P1IE (*(unsigned char volatile xdata *)0xFE31) |
|||
#define P3IE (*(unsigned char volatile xdata *)0xFE33) |
|||
|
|||
#define I2CCFG (*(unsigned char volatile xdata *)0xFE80) |
|||
#define I2CMSCR (*(unsigned char volatile xdata *)0xFE81) |
|||
#define I2CMSST (*(unsigned char volatile xdata *)0xFE82) |
|||
#define I2CSLCR (*(unsigned char volatile xdata *)0xFE83) |
|||
#define I2CSLST (*(unsigned char volatile xdata *)0xFE84) |
|||
#define I2CSLADR (*(unsigned char volatile xdata *)0xFE85) |
|||
#define I2CTXD (*(unsigned char volatile xdata *)0xFE86) |
|||
#define I2CRXD (*(unsigned char volatile xdata *)0xFE87) |
|||
#define I2CMSAUX (*(unsigned char volatile xdata *)0xFE88) |
|||
|
|||
#define TM2PS (*(unsigned char volatile xdata *)0xFEA2) |
|||
#define TM3PS (*(unsigned char volatile xdata *)0xFEA3) |
|||
#define TM4PS (*(unsigned char volatile xdata *)0xFEA4) |
|||
#define ADCTIM (*(unsigned char volatile xdata *)0xFEA8) |
|||
|
|||
#define PWM0CH (*(unsigned char volatile xdata *)0xFF00) |
|||
#define PWM0CL (*(unsigned char volatile xdata *)0xFF01) |
|||
#define PWM0CKS (*(unsigned char volatile xdata *)0xFF02) |
|||
#define PWM0TADCH (*(unsigned char volatile xdata *)0xFF03) |
|||
#define PWM0TADCL (*(unsigned char volatile xdata *)0xFF04) |
|||
#define PWM0IF (*(unsigned char volatile xdata *)0xFF05) |
|||
#define PWM0FDCR (*(unsigned char volatile xdata *)0xFF06) |
|||
#define PWM00T1H (*(unsigned char volatile xdata *)0xFF10) |
|||
#define PWM00T1L (*(unsigned char volatile xdata *)0xFF11) |
|||
#define PWM00T2H (*(unsigned char volatile xdata *)0xFF12) |
|||
#define PWM00T2L (*(unsigned char volatile xdata *)0xFF13) |
|||
#define PWM00CR (*(unsigned char volatile xdata *)0xFF14) |
|||
#define PWM00HLD (*(unsigned char volatile xdata *)0xFF15) |
|||
#define PWM01T1H (*(unsigned char volatile xdata *)0xFF18) |
|||
#define PWM01T1L (*(unsigned char volatile xdata *)0xFF19) |
|||
#define PWM01T2H (*(unsigned char volatile xdata *)0xFF1A) |
|||
#define PWM01T2L (*(unsigned char volatile xdata *)0xFF1B) |
|||
#define PWM01CR (*(unsigned char volatile xdata *)0xFF1C) |
|||
#define PWM01HLD (*(unsigned char volatile xdata *)0xFF1D) |
|||
#define PWM02T1H (*(unsigned char volatile xdata *)0xFF20) |
|||
#define PWM02T1L (*(unsigned char volatile xdata *)0xFF21) |
|||
#define PWM02T2H (*(unsigned char volatile xdata *)0xFF22) |
|||
#define PWM02T2L (*(unsigned char volatile xdata *)0xFF23) |
|||
#define PWM02CR (*(unsigned char volatile xdata *)0xFF24) |
|||
#define PWM02HLD (*(unsigned char volatile xdata *)0xFF25) |
|||
#define PWM03T1H (*(unsigned char volatile xdata *)0xFF28) |
|||
#define PWM03T1L (*(unsigned char volatile xdata *)0xFF29) |
|||
#define PWM03T2H (*(unsigned char volatile xdata *)0xFF2A) |
|||
#define PWM03T2L (*(unsigned char volatile xdata *)0xFF2B) |
|||
#define PWM03CR (*(unsigned char volatile xdata *)0xFF2C) |
|||
#define PWM03HLD (*(unsigned char volatile xdata *)0xFF2D) |
|||
#define PWM04T1H (*(unsigned char volatile xdata *)0xFF30) |
|||
#define PWM04T1L (*(unsigned char volatile xdata *)0xFF31) |
|||
#define PWM04T2H (*(unsigned char volatile xdata *)0xFF32) |
|||
#define PWM04T2L (*(unsigned char volatile xdata *)0xFF33) |
|||
#define PWM04CR (*(unsigned char volatile xdata *)0xFF34) |
|||
#define PWM04HLD (*(unsigned char volatile xdata *)0xFF35) |
|||
#define PWM05T1H (*(unsigned char volatile xdata *)0xFF38) |
|||
#define PWM05T1L (*(unsigned char volatile xdata *)0xFF39) |
|||
#define PWM05T2H (*(unsigned char volatile xdata *)0xFF3A) |
|||
#define PWM05T2L (*(unsigned char volatile xdata *)0xFF3B) |
|||
#define PWM05CR (*(unsigned char volatile xdata *)0xFF3C) |
|||
#define PWM05HLD (*(unsigned char volatile xdata *)0xFF3D) |
|||
#define PWM06T1H (*(unsigned char volatile xdata *)0xFF40) |
|||
#define PWM06T1L (*(unsigned char volatile xdata *)0xFF41) |
|||
#define PWM06T2H (*(unsigned char volatile xdata *)0xFF42) |
|||
#define PWM06T2L (*(unsigned char volatile xdata *)0xFF43) |
|||
#define PWM06CR (*(unsigned char volatile xdata *)0xFF44) |
|||
#define PWM06HLD (*(unsigned char volatile xdata *)0xFF45) |
|||
#define PWM07T1H (*(unsigned char volatile xdata *)0xFF48) |
|||
#define PWM07T1L (*(unsigned char volatile xdata *)0xFF49) |
|||
#define PWM07T2H (*(unsigned char volatile xdata *)0xFF4A) |
|||
#define PWM07T2L (*(unsigned char volatile xdata *)0xFF4B) |
|||
#define PWM07CR (*(unsigned char volatile xdata *)0xFF4C) |
|||
#define PWM07HLD (*(unsigned char volatile xdata *)0xFF4D) |
|||
#define PWM1CH (*(unsigned char volatile xdata *)0xFF50) |
|||
#define PWM1CL (*(unsigned char volatile xdata *)0xFF51) |
|||
#define PWM1CKS (*(unsigned char volatile xdata *)0xFF52) |
|||
#define PWM1IF (*(unsigned char volatile xdata *)0xFF55) |
|||
#define PWM1FDCR (*(unsigned char volatile xdata *)0xFF56) |
|||
#define PWM10T1H (*(unsigned char volatile xdata *)0xFF60) |
|||
#define PWM10T1L (*(unsigned char volatile xdata *)0xFF61) |
|||
#define PWM10T2H (*(unsigned char volatile xdata *)0xFF62) |
|||
#define PWM10T2L (*(unsigned char volatile xdata *)0xFF63) |
|||
#define PWM10CR (*(unsigned char volatile xdata *)0xFF64) |
|||
#define PWM10HLD (*(unsigned char volatile xdata *)0xFF65) |
|||
#define PWM11T1H (*(unsigned char volatile xdata *)0xFF68) |
|||
#define PWM11T1L (*(unsigned char volatile xdata *)0xFF69) |
|||
#define PWM11T2H (*(unsigned char volatile xdata *)0xFF6A) |
|||
#define PWM11T2L (*(unsigned char volatile xdata *)0xFF6B) |
|||
#define PWM11CR (*(unsigned char volatile xdata *)0xFF6C) |
|||
#define PWM11HLD (*(unsigned char volatile xdata *)0xFF6D) |
|||
#define PWM12T1H (*(unsigned char volatile xdata *)0xFF70) |
|||
#define PWM12T1L (*(unsigned char volatile xdata *)0xFF71) |
|||
#define PWM12T2H (*(unsigned char volatile xdata *)0xFF72) |
|||
#define PWM12T2L (*(unsigned char volatile xdata *)0xFF73) |
|||
#define PWM12CR (*(unsigned char volatile xdata *)0xFF74) |
|||
#define PWM12HLD (*(unsigned char volatile xdata *)0xFF75) |
|||
#define PWM13T1H (*(unsigned char volatile xdata *)0xFF78) |
|||
#define PWM13T1L (*(unsigned char volatile xdata *)0xFF79) |
|||
#define PWM13T2H (*(unsigned char volatile xdata *)0xFF7A) |
|||
#define PWM13T2L (*(unsigned char volatile xdata *)0xFF7B) |
|||
#define PWM13CR (*(unsigned char volatile xdata *)0xFF7C) |
|||
#define PWM13HLD (*(unsigned char volatile xdata *)0xFF7D) |
|||
#define PWM14T1H (*(unsigned char volatile xdata *)0xFF80) |
|||
#define PWM14T1L (*(unsigned char volatile xdata *)0xFF81) |
|||
#define PWM14T2H (*(unsigned char volatile xdata *)0xFF82) |
|||
#define PWM14T2L (*(unsigned char volatile xdata *)0xFF83) |
|||
#define PWM14CR (*(unsigned char volatile xdata *)0xFF84) |
|||
#define PWM14HLD (*(unsigned char volatile xdata *)0xFF85) |
|||
#define PWM15T1H (*(unsigned char volatile xdata *)0xFF88) |
|||
#define PWM15T1L (*(unsigned char volatile xdata *)0xFF89) |
|||
#define PWM15T2H (*(unsigned char volatile xdata *)0xFF8A) |
|||
#define PWM15T2L (*(unsigned char volatile xdata *)0xFF8B) |
|||
#define PWM15CR (*(unsigned char volatile xdata *)0xFF8C) |
|||
#define PWM15HLD (*(unsigned char volatile xdata *)0xFF8D) |
|||
#define PWM16T1H (*(unsigned char volatile xdata *)0xFF90) |
|||
#define PWM16T1L (*(unsigned char volatile xdata *)0xFF91) |
|||
#define PWM16T2H (*(unsigned char volatile xdata *)0xFF92) |
|||
#define PWM16T2L (*(unsigned char volatile xdata *)0xFF93) |
|||
#define PWM16CR (*(unsigned char volatile xdata *)0xFF94) |
|||
#define PWM16HLD (*(unsigned char volatile xdata *)0xFF95) |
|||
#define PWM17T1H (*(unsigned char volatile xdata *)0xFF98) |
|||
#define PWM17T1L (*(unsigned char volatile xdata *)0xFF99) |
|||
#define PWM17T2H (*(unsigned char volatile xdata *)0xFF9A) |
|||
#define PWM17T2L (*(unsigned char volatile xdata *)0xFF9B) |
|||
#define PWM17CR (*(unsigned char volatile xdata *)0xFF9C) |
|||
#define PWM17HLD (*(unsigned char volatile xdata *)0xFF9D) |
|||
#define PWM2CH (*(unsigned char volatile xdata *)0xFFA0) |
|||
#define PWM2CL (*(unsigned char volatile xdata *)0xFFA1) |
|||
#define PWM2CKS (*(unsigned char volatile xdata *)0xFFA2) |
|||
#define PWM2TADCH (*(unsigned char volatile xdata *)0xFFA3) |
|||
#define PWM2TADCL (*(unsigned char volatile xdata *)0xFFA4) |
|||
#define PWM2IF (*(unsigned char volatile xdata *)0xFFA5) |
|||
#define PWM2FDCR (*(unsigned char volatile xdata *)0xFFA6) |
|||
#define PWM20T1H (*(unsigned char volatile xdata *)0xFFB0) |
|||
#define PWM20T1L (*(unsigned char volatile xdata *)0xFFB1) |
|||
#define PWM20T2H (*(unsigned char volatile xdata *)0xFFB2) |
|||
#define PWM20T2L (*(unsigned char volatile xdata *)0xFFB3) |
|||
#define PWM20CR (*(unsigned char volatile xdata *)0xFFB4) |
|||
#define PWM20HLD (*(unsigned char volatile xdata *)0xFFB5) |
|||
#define PWM21T1H (*(unsigned char volatile xdata *)0xFFB8) |
|||
#define PWM21T1L (*(unsigned char volatile xdata *)0xFFB9) |
|||
#define PWM21T2H (*(unsigned char volatile xdata *)0xFFBA) |
|||
#define PWM21T2L (*(unsigned char volatile xdata *)0xFFBB) |
|||
#define PWM21CR (*(unsigned char volatile xdata *)0xFFBC) |
|||
#define PWM21HLD (*(unsigned char volatile xdata *)0xFFBD) |
|||
#define PWM22T1H (*(unsigned char volatile xdata *)0xFFC0) |
|||
#define PWM22T1L (*(unsigned char volatile xdata *)0xFFC1) |
|||
#define PWM22T2H (*(unsigned char volatile xdata *)0xFFC2) |
|||
#define PWM22T2L (*(unsigned char volatile xdata *)0xFFC3) |
|||
#define PWM22CR (*(unsigned char volatile xdata *)0xFFC4) |
|||
#define PWM22HLD (*(unsigned char volatile xdata *)0xFFC5) |
|||
#define PWM23T1H (*(unsigned char volatile xdata *)0xFFC8) |
|||
#define PWM23T1L (*(unsigned char volatile xdata *)0xFFC9) |
|||
#define PWM23T2H (*(unsigned char volatile xdata *)0xFFCA) |
|||
#define PWM23T2L (*(unsigned char volatile xdata *)0xFFCB) |
|||
#define PWM23CR (*(unsigned char volatile xdata *)0xFFCC) |
|||
#define PWM23HLD (*(unsigned char volatile xdata *)0xFFCD) |
|||
#define PWM24T1H (*(unsigned char volatile xdata *)0xFFD0) |
|||
#define PWM24T1L (*(unsigned char volatile xdata *)0xFFD1) |
|||
#define PWM24T2H (*(unsigned char volatile xdata *)0xFFD2) |
|||
#define PWM24T2L (*(unsigned char volatile xdata *)0xFFD3) |
|||
#define PWM24CR (*(unsigned char volatile xdata *)0xFFD4) |
|||
#define PWM24HLD (*(unsigned char volatile xdata *)0xFFD5) |
|||
#define PWM25T1H (*(unsigned char volatile xdata *)0xFFD8) |
|||
#define PWM25T1L (*(unsigned char volatile xdata *)0xFFD9) |
|||
#define PWM25T2H (*(unsigned char volatile xdata *)0xFFDA) |
|||
#define PWM25T2L (*(unsigned char volatile xdata *)0xFFDB) |
|||
#define PWM25CR (*(unsigned char volatile xdata *)0xFFDC) |
|||
#define PWM25HLD (*(unsigned char volatile xdata *)0xFFDD) |
|||
#define PWM26T1H (*(unsigned char volatile xdata *)0xFFE0) |
|||
#define PWM26T1L (*(unsigned char volatile xdata *)0xFFE1) |
|||
#define PWM26T2H (*(unsigned char volatile xdata *)0xFFE2) |
|||
#define PWM26T2L (*(unsigned char volatile xdata *)0xFFE3) |
|||
#define PWM26CR (*(unsigned char volatile xdata *)0xFFE4) |
|||
#define PWM26HLD (*(unsigned char volatile xdata *)0xFFE5) |
|||
#define PWM27T1H (*(unsigned char volatile xdata *)0xFFE8) |
|||
#define PWM27T1L (*(unsigned char volatile xdata *)0xFFE9) |
|||
#define PWM27T2H (*(unsigned char volatile xdata *)0xFFEA) |
|||
#define PWM27T2L (*(unsigned char volatile xdata *)0xFFEB) |
|||
#define PWM27CR (*(unsigned char volatile xdata *)0xFFEC) |
|||
#define PWM27HLD (*(unsigned char volatile xdata *)0xFFED) |
|||
#define PWM3CH (*(unsigned char volatile xdata *)0xFC00) |
|||
#define PWM3CL (*(unsigned char volatile xdata *)0xFC01) |
|||
#define PWM3CKS (*(unsigned char volatile xdata *)0xFC02) |
|||
#define PWM3IF (*(unsigned char volatile xdata *)0xFC05) |
|||
#define PWM3FDCR (*(unsigned char volatile xdata *)0xFC06) |
|||
#define PWM30T1H (*(unsigned char volatile xdata *)0xFC10) |
|||
#define PWM30T1L (*(unsigned char volatile xdata *)0xFC11) |
|||
#define PWM30T2H (*(unsigned char volatile xdata *)0xFC12) |
|||
#define PWM30T2L (*(unsigned char volatile xdata *)0xFC13) |
|||
#define PWM30CR (*(unsigned char volatile xdata *)0xFC14) |
|||
#define PWM30HLD (*(unsigned char volatile xdata *)0xFC15) |
|||
#define PWM31T1H (*(unsigned char volatile xdata *)0xFC18) |
|||
#define PWM31T1L (*(unsigned char volatile xdata *)0xFC19) |
|||
#define PWM31T2H (*(unsigned char volatile xdata *)0xFC1A) |
|||
#define PWM31T2L (*(unsigned char volatile xdata *)0xFC1B) |
|||
#define PWM31CR (*(unsigned char volatile xdata *)0xFC1C) |
|||
#define PWM31HLD (*(unsigned char volatile xdata *)0xFC1D) |
|||
#define PWM32T1H (*(unsigned char volatile xdata *)0xFC20) |
|||
#define PWM32T1L (*(unsigned char volatile xdata *)0xFC21) |
|||
#define PWM32T2H (*(unsigned char volatile xdata *)0xFC22) |
|||
#define PWM32T2L (*(unsigned char volatile xdata *)0xFC23) |
|||
#define PWM32CR (*(unsigned char volatile xdata *)0xFC24) |
|||
#define PWM32HLD (*(unsigned char volatile xdata *)0xFC25) |
|||
#define PWM33T1H (*(unsigned char volatile xdata *)0xFC28) |
|||
#define PWM33T1L (*(unsigned char volatile xdata *)0xFC29) |
|||
#define PWM33T2H (*(unsigned char volatile xdata *)0xFC2A) |
|||
#define PWM33T2L (*(unsigned char volatile xdata *)0xFC2B) |
|||
#define PWM33CR (*(unsigned char volatile xdata *)0xFC2C) |
|||
#define PWM33HLD (*(unsigned char volatile xdata *)0xFC2D) |
|||
#define PWM34T1H (*(unsigned char volatile xdata *)0xFC30) |
|||
#define PWM34T1L (*(unsigned char volatile xdata *)0xFC31) |
|||
#define PWM34T2H (*(unsigned char volatile xdata *)0xFC32) |
|||
#define PWM34T2L (*(unsigned char volatile xdata *)0xFC33) |
|||
#define PWM34CR (*(unsigned char volatile xdata *)0xFC34) |
|||
#define PWM34HLD (*(unsigned char volatile xdata *)0xFC35) |
|||
#define PWM35T1H (*(unsigned char volatile xdata *)0xFC38) |
|||
#define PWM35T1L (*(unsigned char volatile xdata *)0xFC39) |
|||
#define PWM35T2H (*(unsigned char volatile xdata *)0xFC3A) |
|||
#define PWM35T2L (*(unsigned char volatile xdata *)0xFC3B) |
|||
#define PWM35CR (*(unsigned char volatile xdata *)0xFC3C) |
|||
#define PWM35HLD (*(unsigned char volatile xdata *)0xFC3D) |
|||
#define PWM36T1H (*(unsigned char volatile xdata *)0xFC40) |
|||
#define PWM36T1L (*(unsigned char volatile xdata *)0xFC41) |
|||
#define PWM36T2H (*(unsigned char volatile xdata *)0xFC42) |
|||
#define PWM36T2L (*(unsigned char volatile xdata *)0xFC43) |
|||
#define PWM36CR (*(unsigned char volatile xdata *)0xFC44) |
|||
#define PWM36HLD (*(unsigned char volatile xdata *)0xFC45) |
|||
#define PWM37T1H (*(unsigned char volatile xdata *)0xFC48) |
|||
#define PWM37T1L (*(unsigned char volatile xdata *)0xFC49) |
|||
#define PWM37T2H (*(unsigned char volatile xdata *)0xFC4A) |
|||
#define PWM37T2L (*(unsigned char volatile xdata *)0xFC4B) |
|||
#define PWM37CR (*(unsigned char volatile xdata *)0xFC4C) |
|||
#define PWM37HLD (*(unsigned char volatile xdata *)0xFC4D) |
|||
#define PWM4CH (*(unsigned char volatile xdata *)0xFC50) |
|||
#define PWM4CL (*(unsigned char volatile xdata *)0xFC51) |
|||
#define PWM4CKS (*(unsigned char volatile xdata *)0xFC52) |
|||
#define PWM4TADCH (*(unsigned char volatile xdata *)0xFC53) |
|||
#define PWM4TADCL (*(unsigned char volatile xdata *)0xFC54) |
|||
#define PWM4IF (*(unsigned char volatile xdata *)0xFC55) |
|||
#define PWM4FDCR (*(unsigned char volatile xdata *)0xFC56) |
|||
#define PWM40T1H (*(unsigned char volatile xdata *)0xFC60) |
|||
#define PWM40T1L (*(unsigned char volatile xdata *)0xFC61) |
|||
#define PWM40T2H (*(unsigned char volatile xdata *)0xFC62) |
|||
#define PWM40T2L (*(unsigned char volatile xdata *)0xFC63) |
|||
#define PWM40CR (*(unsigned char volatile xdata *)0xFC64) |
|||
#define PWM40HLD (*(unsigned char volatile xdata *)0xFC65) |
|||
#define PWM41T1H (*(unsigned char volatile xdata *)0xFC68) |
|||
#define PWM41T1L (*(unsigned char volatile xdata *)0xFC69) |
|||
#define PWM41T2H (*(unsigned char volatile xdata *)0xFC6A) |
|||
#define PWM41T2L (*(unsigned char volatile xdata *)0xFC6B) |
|||
#define PWM41CR (*(unsigned char volatile xdata *)0xFC6C) |
|||
#define PWM41HLD (*(unsigned char volatile xdata *)0xFC6D) |
|||
#define PWM42T1H (*(unsigned char volatile xdata *)0xFC70) |
|||
#define PWM42T1L (*(unsigned char volatile xdata *)0xFC71) |
|||
#define PWM42T2H (*(unsigned char volatile xdata *)0xFC72) |
|||
#define PWM42T2L (*(unsigned char volatile xdata *)0xFC73) |
|||
#define PWM42CR (*(unsigned char volatile xdata *)0xFC74) |
|||
#define PWM42HLD (*(unsigned char volatile xdata *)0xFC75) |
|||
#define PWM43T1H (*(unsigned char volatile xdata *)0xFC78) |
|||
#define PWM43T1L (*(unsigned char volatile xdata *)0xFC79) |
|||
#define PWM43T2H (*(unsigned char volatile xdata *)0xFC7A) |
|||
#define PWM43T2L (*(unsigned char volatile xdata *)0xFC7B) |
|||
#define PWM43CR (*(unsigned char volatile xdata *)0xFC7C) |
|||
#define PWM43HLD (*(unsigned char volatile xdata *)0xFC7D) |
|||
#define PWM44T1H (*(unsigned char volatile xdata *)0xFC80) |
|||
#define PWM44T1L (*(unsigned char volatile xdata *)0xFC81) |
|||
#define PWM44T2H (*(unsigned char volatile xdata *)0xFC82) |
|||
#define PWM44T2L (*(unsigned char volatile xdata *)0xFC83) |
|||
#define PWM44CR (*(unsigned char volatile xdata *)0xFC84) |
|||
#define PWM44HLD (*(unsigned char volatile xdata *)0xFC85) |
|||
#define PWM45T1H (*(unsigned char volatile xdata *)0xFC88) |
|||
#define PWM45T1L (*(unsigned char volatile xdata *)0xFC89) |
|||
#define PWM45T2H (*(unsigned char volatile xdata *)0xFC8A) |
|||
#define PWM45T2L (*(unsigned char volatile xdata *)0xFC8B) |
|||
#define PWM45CR (*(unsigned char volatile xdata *)0xFC8C) |
|||
#define PWM45HLD (*(unsigned char volatile xdata *)0xFC8D) |
|||
#define PWM46T1H (*(unsigned char volatile xdata *)0xFC90) |
|||
#define PWM46T1L (*(unsigned char volatile xdata *)0xFC91) |
|||
#define PWM46T2H (*(unsigned char volatile xdata *)0xFC92) |
|||
#define PWM46T2L (*(unsigned char volatile xdata *)0xFC93) |
|||
#define PWM46CR (*(unsigned char volatile xdata *)0xFC94) |
|||
#define PWM46HLD (*(unsigned char volatile xdata *)0xFC95) |
|||
#define PWM47T1H (*(unsigned char volatile xdata *)0xFC98) |
|||
#define PWM47T1L (*(unsigned char volatile xdata *)0xFC99) |
|||
#define PWM47T2H (*(unsigned char volatile xdata *)0xFC9A) |
|||
#define PWM47T2L (*(unsigned char volatile xdata *)0xFC9B) |
|||
#define PWM47CR (*(unsigned char volatile xdata *)0xFC9C) |
|||
#define PWM47HLD (*(unsigned char volatile xdata *)0xFC9D) |
|||
#define PWM5CH (*(unsigned char volatile xdata *)0xFCA0) |
|||
#define PWM5CL (*(unsigned char volatile xdata *)0xFCA1) |
|||
#define PWM5CKS (*(unsigned char volatile xdata *)0xFCA2) |
|||
#define PWM5IF (*(unsigned char volatile xdata *)0xFCA5) |
|||
#define PWM5FDCR (*(unsigned char volatile xdata *)0xFCA6) |
|||
#define PWM50T1H (*(unsigned char volatile xdata *)0xFCB0) |
|||
#define PWM50T1L (*(unsigned char volatile xdata *)0xFCB1) |
|||
#define PWM50T2H (*(unsigned char volatile xdata *)0xFCB2) |
|||
#define PWM50T2L (*(unsigned char volatile xdata *)0xFCB3) |
|||
#define PWM50CR (*(unsigned char volatile xdata *)0xFCB4) |
|||
#define PWM50HLD (*(unsigned char volatile xdata *)0xFCB5) |
|||
#define PWM51T1H (*(unsigned char volatile xdata *)0xFCB8) |
|||
#define PWM51T1L (*(unsigned char volatile xdata *)0xFCB9) |
|||
#define PWM51T2H (*(unsigned char volatile xdata *)0xFCBA) |
|||
#define PWM51T2L (*(unsigned char volatile xdata *)0xFCBB) |
|||
#define PWM51CR (*(unsigned char volatile xdata *)0xFCBC) |
|||
#define PWM51HLD (*(unsigned char volatile xdata *)0xFCBD) |
|||
#define PWM52T1H (*(unsigned char volatile xdata *)0xFCC0) |
|||
#define PWM52T1L (*(unsigned char volatile xdata *)0xFCC1) |
|||
#define PWM52T2H (*(unsigned char volatile xdata *)0xFCC2) |
|||
#define PWM52T2L (*(unsigned char volatile xdata *)0xFCC3) |
|||
#define PWM52CR (*(unsigned char volatile xdata *)0xFCC4) |
|||
#define PWM52HLD (*(unsigned char volatile xdata *)0xFCC5) |
|||
#define PWM53T1H (*(unsigned char volatile xdata *)0xFCC8) |
|||
#define PWM53T1L (*(unsigned char volatile xdata *)0xFCC9) |
|||
#define PWM53T2H (*(unsigned char volatile xdata *)0xFCCA) |
|||
#define PWM53T2L (*(unsigned char volatile xdata *)0xFCCB) |
|||
#define PWM53CR (*(unsigned char volatile xdata *)0xFCCC) |
|||
#define PWM53HLD (*(unsigned char volatile xdata *)0xFCCD) |
|||
#define PWM54T1H (*(unsigned char volatile xdata *)0xFCD0) |
|||
#define PWM54T1L (*(unsigned char volatile xdata *)0xFCD1) |
|||
#define PWM54T2H (*(unsigned char volatile xdata *)0xFCD2) |
|||
#define PWM54T2L (*(unsigned char volatile xdata *)0xFCD3) |
|||
#define PWM54CR (*(unsigned char volatile xdata *)0xFCD4) |
|||
#define PWM54HLD (*(unsigned char volatile xdata *)0xFCD5) |
|||
#define PWM55T1H (*(unsigned char volatile xdata *)0xFCD8) |
|||
#define PWM55T1L (*(unsigned char volatile xdata *)0xFCD9) |
|||
#define PWM55T2H (*(unsigned char volatile xdata *)0xFCDA) |
|||
#define PWM55T2L (*(unsigned char volatile xdata *)0xFCDB) |
|||
#define PWM55CR (*(unsigned char volatile xdata *)0xFCDC) |
|||
#define PWM55HLD (*(unsigned char volatile xdata *)0xFCDD) |
|||
#define PWM56T1H (*(unsigned char volatile xdata *)0xFCE0) |
|||
#define PWM56T1L (*(unsigned char volatile xdata *)0xFCE1) |
|||
#define PWM56T2H (*(unsigned char volatile xdata *)0xFCE2) |
|||
#define PWM56T2L (*(unsigned char volatile xdata *)0xFCE3) |
|||
#define PWM56CR (*(unsigned char volatile xdata *)0xFCE4) |
|||
#define PWM56HLD (*(unsigned char volatile xdata *)0xFCE5) |
|||
#define PWM57T1H (*(unsigned char volatile xdata *)0xFCE8) |
|||
#define PWM57T1L (*(unsigned char volatile xdata *)0xFCE9) |
|||
#define PWM57T2H (*(unsigned char volatile xdata *)0xFCEA) |
|||
#define PWM57T2L (*(unsigned char volatile xdata *)0xFCEB) |
|||
#define PWM57CR (*(unsigned char volatile xdata *)0xFCEC) |
|||
#define PWM57HLD (*(unsigned char volatile xdata *)0xFCED) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
|
|||
/// >>>>> add by cc
|
|||
|
|||
#include "../clib/bit.h" |
|||
|
|||
#define D_stdIO_P0_ALL() P0M1=0;P0M0=0; |
|||
#define D_HighI_P0_ALL() P0M1=0;P0M0=0XFF; |
|||
#define D_HighR_P0_ALL() P0M1=0XFF;P0M0=0; |
|||
#define D_OpenD_P0_ALL() P0M1=0XFF;P0M0=0XFF; |
|||
|
|||
#define D_stdIO_P1_ALL() P1M1=0;P1M0=0; |
|||
#define D_HighI_P1_ALL() P1M1=0;P1M0=0XFF; |
|||
#define D_HighR_P1_ALL() P1M1=0XFF;P1M0=0; |
|||
#define D_OpenD_P1_ALL() P1M1=0XFF;P1M0=0XFF; |
|||
|
|||
|
|||
#define D_stdIO_P0(n) BITN_0(P0M1,n);BITN_0(P0M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P0(n) BITN_0(P0M1,n);BITN_1(P0M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P0(n) BITN_1(P0M1,n);BITN_0(P0M0,n); /////////10 高阻
|
|||
#define D_OpenD_P0(n) BITN_1(P0M1,n);BITN_1(P0M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P1(n) BITN_0(P1M1,n);BITN_0(P1M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P1(n) BITN_0(P1M1,n);BITN_1(P1M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P1(n) BITN_1(P1M1,n);BITN_0(P1M0,n); /////////10 高阻
|
|||
#define D_OpenD_P1(n) BITN_1(P1M1,n);BITN_1(P1M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P2(n) BITN_0(P2M1,n);BITN_0(P2M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P2(n) BITN_0(P2M1,n);BITN_1(P2M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P2(n) BITN_1(P2M1,n);BITN_0(P2M0,n); /////////10 高阻
|
|||
#define D_OpenD_P2(n) BITN_1(P2M1,n);BITN_1(P2M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P3(n) BITN_0(P3M1,n);BITN_0(P3M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P3(n) BITN_0(P3M1,n);BITN_1(P3M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P3(n) BITN_1(P3M1,n);BITN_0(P3M0,n); /////////10 高阻
|
|||
#define D_OpenD_P3(n) BITN_1(P3M1,n);BITN_1(P3M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P4(n) BITN_0(P4M1,n);BITN_0(P4M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P4(n) BITN_0(P4M1,n);BITN_1(P4M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P4(n) BITN_1(P4M1,n);BITN_0(P4M0,n); /////////10 高阻
|
|||
#define D_OpenD_P4(n) BITN_1(P4M1,n);BITN_1(P4M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P5(n) BITN_0(P5M1,n);BITN_0(P5M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P5(n) BITN_0(P5M1,n);BITN_1(P5M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P5(n) BITN_1(P5M1,n);BITN_0(P5M0,n); /////////10 高阻
|
|||
#define D_OpenD_P5(n) BITN_1(P5M1,n);BITN_1(P5M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P6(n) BITN_0(P6M1,n);BITN_0(P6M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P6(n) BITN_0(P6M1,n);BITN_1(P6M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P6(n) BITN_1(P6M1,n);BITN_0(P6M0,n); /////////10 高阻
|
|||
#define D_OpenD_P6(n) BITN_1(P6M1,n);BITN_1(P6M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
#define D_stdIO_P7(n) BITN_0(P7M1,n);BITN_0(P7M0,n); //////00 准双向口 灌电流20mA 拉电流270-150uS
|
|||
#define D_HighI_P7(n) BITN_0(P7M1,n);BITN_1(P7M0,n); //////01 推挽输出 20mA 加限流
|
|||
#define D_HighR_P7(n) BITN_1(P7M1,n);BITN_0(P7M0,n); /////////10 高阻
|
|||
#define D_OpenD_P7(n) BITN_1(P7M1,n);BITN_1(P7M0,n); /////11 开漏 open-Drain 内部上拉电阻断开 开漏模式既可以度外部状态也可以对外输出高低电平
|
|||
|
|||
/***
|
|||
|
|||
#define P0_conf_in(n) BITN_1(P0M1,n);BITN_0(P0M0,n); |
|||
#define P1_conf_in(n) BITN_1(P1M1,n);BITN_0(P1M0,n); |
|||
#define P2_conf_in(n) BITN_1(P2M1,n);BITN_0(P2M0,n); |
|||
#define P2_conf_port(n) BITN_0(P2M1,n);BITN_0(P2M0,n); |
|||
|
|||
|
|||
#define P3_conf_in(n) BITN_1(P3M1,n);BITN_0(P3M0,n); |
|||
#define P3_conf_port(n) BITN_0(P3M1,n);BITN_0(P3M0,n); |
|||
|
|||
#define P4_conf_in(n) BITN_1(P4M1,n);BITN_0(P4M0,n); |
|||
#define P5_conf_in(n) BITN_1(P5M1,n);BITN_0(P5M0,n); |
|||
|
|||
***/ |
|||
|
|||
|
|||
|
|||
#define NOP() _nop_() |
|||
|
|||
#define L0_INT4_OPEN() BITN_1(INT_CLKO, INT_EX4) |
|||
#define L0_INT4_CLOSE() BITN_0(INT_CLKO, INT_EX4) |
|||
|
|||
#define L0_INT4_AT() BITN_G(INT_CLKO, INT_EX4) |
|||
|
|||
|
|||
|
|||
|
|||
#define L0_INT4_CLEAR() BITN_0(AUXINTIF, INT4IF) |
|||
#define L0_INT3_CLEAR() BITN_0(AUXINTIF, INT3IF) |
|||
#define L0_INT2_CLEAR() BITN_0(AUXINTIF, INT2IF) |
|||
|
|||
|
|||
|
|||
|
|||
//////
|
|||
|
|||
#define L0_INT3_OPEN() BITN_1(INT_CLKO, INT_EX3); |
|||
#define L0_INT3_CLOSE() BITN_0(INT_CLKO, INT_EX3); |
|||
#define L0_INT2_OPEN() BITN_1(INT_CLKO, INT_EX2); |
|||
#define L0_INT2_CLOSE() BITN_0(INT_CLKO, INT_EX2); |
|||
#define L0_INT1_OPEN() EX1 = 1; |
|||
#define L0_INT1_CLOSE() EX1 = 0; |
|||
#define L0_INT0_OPEN() EX0 = 1; |
|||
#define L0_INT0_CLOSE() EX0 = 0; |
|||
|
|||
#define D_ISR_int0 0 ///int0 下降沿触发 = 0 上下沿均可触发
|
|||
#define D_ISR_timer0 1 |
|||
#define D_ISR_int1 2 ///int1 下降沿触发 = 0 上下沿均可触发
|
|||
#define D_ISR_timer1 3 |
|||
#define D_ISR_int2 10 /////只有下降沿
|
|||
#define D_ISR_int3 11 /////只有下降沿
|
|||
#define D_SERVE_UART 4 |
|||
#define D_ISR_int4 16 /////只有下降沿
|
|||
|
|||
#if 0 |
|||
#define L0_TIMER1_start() TR1 = 1; |
|||
#define L0_TIMER1_end() TR1 = 0; |
|||
|
|||
|
|||
#define L0_TIMER1_isr_OPEN() ET1 = 1; |
|||
#define L0_TIMER1_isr_CLOSE() ET1 = 0; |
|||
|
|||
|
|||
#else |
|||
|
|||
#define L0_TIMER1_start() ET1 = 1; |
|||
#define L0_TIMER1_end() ET1 = 0; |
|||
|
|||
|
|||
#define L0_TIMER1_isr_OPEN() TR1 = 1; |
|||
#define L0_TIMER1_isr_CLOSE() TR1 = 0; |
|||
|
|||
|
|||
#endif |
|||
|
|||
/// fixme 颠倒定义会让c51锁死#define _nop_() NOP()
|
|||
|
|||
///#define L0_INT3_OPEN() BITN_1(INT_CLKO,INT_EX3); //使能INT3中断
|
|||
///#define L0_INT3_CLOSE() BITN_0(INT_CLKO,INT_EX3);
|
|||
#endif //STC_stc8a8k
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
@ -1,593 +0,0 @@ |
|||
#ifndef __STC8F_H_ |
|||
#define __STC8F_H_ |
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//包含本头文件后,不用另外再包含"REG51.H"
|
|||
|
|||
//内核特殊功能寄存器
|
|||
sfr ACC = 0xe0; |
|||
sfr B = 0xf0; |
|||
sfr PSW = 0xd0; |
|||
sbit CY = PSW^7; |
|||
sbit AC = PSW^6; |
|||
sbit F0 = PSW^5; |
|||
sbit RS1 = PSW^4; |
|||
sbit RS0 = PSW^3; |
|||
sbit OV = PSW^2; |
|||
sbit F1 = PSW^1; |
|||
sbit P = PSW^0; |
|||
sfr SP = 0x81; |
|||
sfr DPL = 0x82; |
|||
sfr DPH = 0x83; |
|||
sfr TA = 0xae; |
|||
sfr DPS = 0xe3; |
|||
sfr DPL1 = 0xe4; |
|||
sfr DPH1 = 0xe5; |
|||
|
|||
|
|||
//I/O 口特殊功能寄存器
|
|||
sfr P0 = 0x80; |
|||
sfr P1 = 0x90; |
|||
sfr P2 = 0xa0; |
|||
sfr P3 = 0xb0; |
|||
sfr P4 = 0xc0; |
|||
sfr P5 = 0xc8; |
|||
sfr P6 = 0xe8; |
|||
sfr P7 = 0xf8; |
|||
sfr P0M0 = 0x94; |
|||
sfr P0M1 = 0x93; |
|||
sfr P1M0 = 0x92; |
|||
sfr P1M1 = 0x91; |
|||
sfr P2M0 = 0x96; |
|||
sfr P2M1 = 0x95; |
|||
sfr P3M0 = 0xb2; |
|||
sfr P3M1 = 0xb1; |
|||
sfr P4M0 = 0xb4; |
|||
sfr P4M1 = 0xb3; |
|||
sfr P5M0 = 0xca; |
|||
sfr P5M1 = 0xc9; |
|||
sfr P6M0 = 0xcc; |
|||
sfr P6M1 = 0xcb; |
|||
sfr P7M0 = 0xe2; |
|||
sfr P7M1 = 0xe1; |
|||
|
|||
sbit P00 = P0^0; |
|||
sbit P01 = P0^1; |
|||
sbit P02 = P0^2; |
|||
sbit P03 = P0^3; |
|||
sbit P04 = P0^4; |
|||
sbit P05 = P0^5; |
|||
sbit P06 = P0^6; |
|||
sbit P07 = P0^7; |
|||
sbit P10 = P1^0; |
|||
sbit P11 = P1^1; |
|||
sbit P12 = P1^2; |
|||
sbit P13 = P1^3; |
|||
sbit P14 = P1^4; |
|||
sbit P15 = P1^5; |
|||
sbit P16 = P1^6; |
|||
sbit P17 = P1^7; |
|||
sbit P20 = P2^0; |
|||
sbit P21 = P2^1; |
|||
sbit P22 = P2^2; |
|||
sbit P23 = P2^3; |
|||
sbit P24 = P2^4; |
|||
sbit P25 = P2^5; |
|||
sbit P26 = P2^6; |
|||
sbit P27 = P2^7; |
|||
sbit P30 = P3^0; |
|||
sbit P31 = P3^1; |
|||
sbit P32 = P3^2; |
|||
sbit P33 = P3^3; |
|||
sbit P34 = P3^4; |
|||
sbit P35 = P3^5; |
|||
sbit P36 = P3^6; |
|||
sbit P37 = P3^7; |
|||
sbit P40 = P4^0; |
|||
sbit P41 = P4^1; |
|||
sbit P42 = P4^2; |
|||
sbit P43 = P4^3; |
|||
sbit P44 = P4^4; |
|||
sbit P45 = P4^5; |
|||
sbit P46 = P4^6; |
|||
sbit P47 = P4^7; |
|||
sbit P50 = P5^0; |
|||
sbit P51 = P5^1; |
|||
sbit P52 = P5^2; |
|||
sbit P53 = P5^3; |
|||
sbit P54 = P5^4; |
|||
sbit P55 = P5^5; |
|||
sbit P56 = P5^6; |
|||
sbit P57 = P5^7; |
|||
sbit P60 = P6^0; |
|||
sbit P61 = P6^1; |
|||
sbit P62 = P6^2; |
|||
sbit P63 = P6^3; |
|||
sbit P64 = P6^4; |
|||
sbit P65 = P6^5; |
|||
sbit P66 = P6^6; |
|||
sbit P67 = P6^7; |
|||
sbit P70 = P7^0; |
|||
sbit P71 = P7^1; |
|||
sbit P72 = P7^2; |
|||
sbit P73 = P7^3; |
|||
sbit P74 = P7^4; |
|||
sbit P75 = P7^5; |
|||
sbit P76 = P7^6; |
|||
sbit P77 = P7^7; |
|||
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
#define P0PU (*(unsigned char volatile xdata *)0xfe10) |
|||
#define P1PU (*(unsigned char volatile xdata *)0xfe11) |
|||
#define P2PU (*(unsigned char volatile xdata *)0xfe12) |
|||
#define P3PU (*(unsigned char volatile xdata *)0xfe13) |
|||
#define P4PU (*(unsigned char volatile xdata *)0xfe14) |
|||
#define P5PU (*(unsigned char volatile xdata *)0xfe15) |
|||
#define P6PU (*(unsigned char volatile xdata *)0xfe16) |
|||
#define P7PU (*(unsigned char volatile xdata *)0xfe17) |
|||
#define P0NCS (*(unsigned char volatile xdata *)0xfe18) |
|||
#define P1NCS (*(unsigned char volatile xdata *)0xfe19) |
|||
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a) |
|||
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b) |
|||
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) |
|||
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d) |
|||
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e) |
|||
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f) |
|||
|
|||
//系统管理特殊功能寄存器
|
|||
sfr PCON = 0x87; |
|||
#define SMOD 0x80 |
|||
#define SMOD0 0x40 |
|||
#define LVDF 0x20 |
|||
#define POF 0x10 |
|||
#define GF1 0x08 |
|||
#define GF0 0x04 |
|||
#define PD 0x02 |
|||
#define IDL 0x01 |
|||
sfr AUXR = 0x8e; |
|||
#define T0x12 0x80 |
|||
#define T1x12 0x40 |
|||
#define UART_M0x6 0x20 |
|||
#define T2R 0x10 |
|||
#define T2_CT 0x08 |
|||
#define T2x12 0x04 |
|||
#define EXTRAM 0x02 |
|||
#define S1ST2 0x01 |
|||
sfr AUXR2 = 0x97; |
|||
#define TXLNRX 0x10 |
|||
sfr BUS_SPEED = 0xa1; |
|||
sfr P_SW1 = 0xa2; |
|||
sfr P_SW2 = 0xba; |
|||
#define EAXFR 0x80 |
|||
sfr VOCTRL = 0xbb; |
|||
sfr RSTCFG = 0xff; |
|||
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
#define CKSEL (*(unsigned char volatile xdata *)0xfe00) |
|||
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01) |
|||
#define IRC24MCR (*(unsigned char volatile xdata *)0xfe02) |
|||
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03) |
|||
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04) |
|||
|
|||
//中断特殊功能寄存器
|
|||
sfr IE = 0xa8; |
|||
sbit EA = IE^7; |
|||
sbit ELVD = IE^6; |
|||
sbit EADC = IE^5; |
|||
sbit ES = IE^4; |
|||
sbit ET1 = IE^3; |
|||
sbit EX1 = IE^2; |
|||
sbit ET0 = IE^1; |
|||
sbit EX0 = IE^0; |
|||
sfr IE2 = 0xaf; |
|||
#define ET4 0x40 |
|||
#define ET3 0x20 |
|||
#define ES4 0x10 |
|||
#define ES3 0x08 |
|||
#define ET2 0x04 |
|||
#define ESPI 0x02 |
|||
#define ES2 0x01 |
|||
|
|||
sfr IP = 0xb8; |
|||
sbit PPCA = IP^7; |
|||
sbit PLVD = IP^6; |
|||
sbit PADC = IP^5; |
|||
sbit PS = IP^4; |
|||
sbit PT1 = IP^3; |
|||
sbit PX1 = IP^2; |
|||
sbit PT0 = IP^1; |
|||
sbit PX0 = IP^0; |
|||
sfr IP2 = 0xb5; |
|||
#define PI2C 0x40 |
|||
#define PCMP 0x20 |
|||
#define PX4 0x10 |
|||
#define PPWMFD 0x08 |
|||
#define PPWM 0x04 |
|||
#define PSPI 0x02 |
|||
#define PS2 0x01 |
|||
sfr IPH = 0xb7; |
|||
#define PPCAH 0x80 |
|||
#define PLVDH 0x40 |
|||
#define PADCH 0x20 |
|||
#define PSH 0x10 |
|||
#define PT1H 0x08 |
|||
#define PX1H 0x04 |
|||
#define PT0H 0x02 |
|||
#define PX0H 0x01 |
|||
sfr IP2H = 0xb6; |
|||
#define PI2CH 0x40 |
|||
#define PCMPH 0x20 |
|||
#define PX4H 0x10 |
|||
#define PPWMFDH 0x08 |
|||
#define PPWMH 0x04 |
|||
#define PSPIH 0x02 |
|||
#define PS2H 0x01 |
|||
sfr INTCLKO = 0x8f; |
|||
#define EX4 0x40 |
|||
#define EX3 0x20 |
|||
#define EX2 0x10 |
|||
#define T2CLKO 0x04 |
|||
#define T1CLKO 0x02 |
|||
#define T0CLKO 0x01 |
|||
sfr AUXINTIF = 0xef; |
|||
#define INT4IF 0x40 |
|||
#define INT3IF 0x20 |
|||
#define INT2IF 0x10 |
|||
#define T4IF 0x04 |
|||
#define T3IF 0x02 |
|||
#define T2IF 0x01 |
|||
|
|||
//定时器特殊功能寄存器
|
|||
sfr TCON = 0x88; |
|||
sbit TF1 = TCON^7; |
|||
sbit TR1 = TCON^6; |
|||
sbit TF0 = TCON^5; |
|||
sbit TR0 = TCON^4; |
|||
sbit IE1 = TCON^3; |
|||
sbit IT1 = TCON^2; |
|||
sbit IE0 = TCON^1; |
|||
sbit IT0 = TCON^0; |
|||
sfr TMOD = 0x89; |
|||
#define T1_GATE 0x80 |
|||
#define T1_CT 0x40 |
|||
#define T1_M1 0x20 |
|||
#define T1_M0 0x10 |
|||
#define T0_GATE 0x08 |
|||
#define T0_CT 0x04 |
|||
#define T0_M1 0x02 |
|||
#define T0_M0 0x01 |
|||
sfr TL0 = 0x8a; |
|||
sfr TL1 = 0x8b; |
|||
sfr TH0 = 0x8c; |
|||
sfr TH1 = 0x8d; |
|||
sfr T4T3M = 0xd1; |
|||
#define T4R 0x80 |
|||
#define T4_CT 0x40 |
|||
#define T4x12 0x20 |
|||
#define T4CLKO 0x10 |
|||
#define T3R 0x08 |
|||
#define T3_CT 0x04 |
|||
#define T3x12 0x02 |
|||
#define T3CLKO 0x01 |
|||
sfr T4H = 0xd2; |
|||
sfr T4L = 0xd3; |
|||
sfr T3H = 0xd4; |
|||
sfr T3L = 0xd5; |
|||
sfr T2H = 0xd6; |
|||
sfr T2L = 0xd7; |
|||
sfr TH4 = 0xd2; |
|||
sfr TL4 = 0xd3; |
|||
sfr TH3 = 0xd4; |
|||
sfr TL3 = 0xd5; |
|||
sfr TH2 = 0xd6; |
|||
sfr TL2 = 0xd7; |
|||
sfr WKTCL = 0xaa; |
|||
sfr WKTCH = 0xab; |
|||
#define WKTEN 0x80 |
|||
sfr WDT_CONTR = 0xc1; |
|||
#define WDT_FLAG 0x80 |
|||
#define EN_WDT 0x20 |
|||
#define CLR_WDT 0x10 |
|||
#define IDL_WDT 0x08 |
|||
|
|||
//串行口特殊功能寄存器
|
|||
sfr SCON = 0x98; |
|||
sbit SM0 = SCON^7; |
|||
sbit SM1 = SCON^6; |
|||
sbit SM2 = SCON^5; |
|||
sbit REN = SCON^4; |
|||
sbit TB8 = SCON^3; |
|||
sbit RB8 = SCON^2; |
|||
sbit TI = SCON^1; |
|||
sbit RI = SCON^0; |
|||
sfr SBUF = 0x99; |
|||
sfr S2CON = 0x9a; |
|||
#define S2SM0 0x80 |
|||
#define S2ST4 0x40 |
|||
#define S2SM2 0x20 |
|||
#define S2REN 0x10 |
|||
#define S2TB8 0x08 |
|||
#define S2RB8 0x04 |
|||
#define S2TI 0x02 |
|||
#define S2RI 0x01 |
|||
sfr S2BUF = 0x9b; |
|||
sfr S3CON = 0xac; |
|||
#define S3SM0 0x80 |
|||
#define S3ST4 0x40 |
|||
#define S3SM2 0x20 |
|||
#define S3REN 0x10 |
|||
#define S3TB8 0x08 |
|||
#define S3RB8 0x04 |
|||
#define S3TI 0x02 |
|||
#define S3RI 0x01 |
|||
sfr S3BUF = 0xad; |
|||
sfr S4CON = 0x84; |
|||
#define S4SM0 0x80 |
|||
#define S4ST4 0x40 |
|||
#define S4SM2 0x20 |
|||
#define S4REN 0x10 |
|||
#define S4TB8 0x08 |
|||
#define S4RB8 0x04 |
|||
#define S4TI 0x02 |
|||
#define S4RI 0x01 |
|||
sfr S4BUF = 0x85; |
|||
sfr SADDR = 0xa9; |
|||
sfr SADEN = 0xb9; |
|||
|
|||
//ADC 特殊功能寄存器
|
|||
sfr ADC_CONTR = 0xbc; |
|||
#define ADC_POWER 0x80 |
|||
#define ADC_START 0x40 |
|||
#define ADC_FLAG 0x20 |
|||
sfr ADC_RES = 0xbd; |
|||
sfr ADC_RESL = 0xbe; |
|||
sfr ADCCFG = 0xde; |
|||
#define ADC_RESFMT 0x20 |
|||
|
|||
//SPI 特殊功能寄存器
|
|||
sfr SPSTAT = 0xcd; |
|||
#define SPIF 0x80 |
|||
#define WCOL 0x40 |
|||
sfr SPCTL = 0xce; |
|||
#define SSIG 0x80 |
|||
#define SPEN 0x40 |
|||
#define DORD 0x20 |
|||
#define MSTR 0x10 |
|||
#define CPOL 0x08 |
|||
#define CPHA 0x04 |
|||
sfr SPDAT = 0xcf; |
|||
|
|||
//IAP/ISP 特殊功能寄存器
|
|||
sfr IAP_DATA = 0xc2; |
|||
sfr IAP_ADDRH = 0xc3; |
|||
sfr IAP_ADDRL = 0xc4; |
|||
sfr IAP_CMD = 0xc5; |
|||
#define IAP_IDL 0x00 |
|||
#define IAP_READ 0x01 |
|||
#define IAP_WRITE 0x02 |
|||
#define IAP_ERASE 0x03 |
|||
sfr IAP_TRIG = 0xc6; |
|||
sfr IAP_CONTR = 0xc7; |
|||
#define IAPEN 0x80 |
|||
#define SWBS 0x40 |
|||
#define SWRST 0x20 |
|||
#define CMD_FAIL 0x10 |
|||
sfr ISP_DATA = 0xc2; |
|||
sfr ISP_ADDRH = 0xc3; |
|||
sfr ISP_ADDRL = 0xc4; |
|||
sfr ISP_CMD = 0xc5; |
|||
sfr ISP_TRIG = 0xc6; |
|||
sfr ISP_CONTR = 0xc7; |
|||
|
|||
//比较器特殊功能寄存器
|
|||
sfr CMPCR1 = 0xe6; |
|||
#define CMPEN 0x80 |
|||
#define CMPIF 0x40 |
|||
#define PIE 0x20 |
|||
#define NIE 0x10 |
|||
#define PIS 0x08 |
|||
#define NIS 0x04 |
|||
#define CMPOE 0x02 |
|||
#define CMPRES 0x01 |
|||
sfr CMPCR2 = 0xe7; |
|||
#define INVCMPO 0x80 |
|||
#define DISFLT 0x40 |
|||
|
|||
//PCA/PWM 特殊功能寄存器
|
|||
sfr CCON = 0xd8; |
|||
sbit CF = CCON^7; |
|||
sbit CR = CCON^6; |
|||
sbit CCF3 = CCON^3; |
|||
sbit CCF2 = CCON^2; |
|||
sbit CCF1 = CCON^1; |
|||
sbit CCF0 = CCON^0; |
|||
sfr CMOD = 0xd9; |
|||
#define CIDL 0x80 |
|||
#define ECF 0x01 |
|||
sfr CL = 0xe9; |
|||
sfr CH = 0xf9; |
|||
sfr CCAPM0 = 0xda; |
|||
#define ECOM0 0x40 |
|||
#define CCAPP0 0x20 |
|||
#define CCAPN0 0x10 |
|||
#define MAT0 0x08 |
|||
#define TOG0 0x04 |
|||
#define PWM0 0x02 |
|||
#define ECCF0 0x01 |
|||
sfr CCAPM1 = 0xdb; |
|||
#define ECOM1 0x40 |
|||
#define CCAPP1 0x20 |
|||
#define CCAPN1 0x10 |
|||
#define MAT1 0x08 |
|||
#define TOG1 0x04 |
|||
#define PWM1 0x02 |
|||
#define ECCF1 0x01 |
|||
sfr CCAPM2 = 0xdc; |
|||
#define ECOM2 0x40 |
|||
#define CCAPP2 0x20 |
|||
#define CCAPN2 0x10 |
|||
#define MAT2 0x08 |
|||
#define TOG2 0x04 |
|||
#define PWM2 0x02 |
|||
#define ECCF2 0x01 |
|||
sfr CCAPM3 = 0xdd; |
|||
#define ECOM3 0x40 |
|||
#define CCAPP3 0x20 |
|||
#define CCAPN3 0x10 |
|||
#define MAT3 0x08 |
|||
#define TOG3 0x04 |
|||
#define PWM3 0x02 |
|||
#define ECCF3 0x01 |
|||
sfr CCAP0L = 0xea; |
|||
sfr CCAP1L = 0xeb; |
|||
sfr CCAP2L = 0xec; |
|||
sfr CCAP3L = 0xed; |
|||
sfr CCAP0H = 0xfa; |
|||
sfr CCAP1H = 0xfb; |
|||
sfr CCAP2H = 0xfc; |
|||
sfr CCAP3H = 0xfd; |
|||
sfr PCA_PWM0 = 0xf2; |
|||
sfr PCA_PWM1 = 0xf3; |
|||
sfr PCA_PWM2 = 0xf4; |
|||
sfr PCA_PWM3 = 0xf5; |
|||
|
|||
//增强型PWM波形发生器特殊功能寄存器
|
|||
sfr PWMCFG = 0xf1; |
|||
#define CBIF 0x80 |
|||
#define ETADC 0x40 |
|||
sfr PWMIF = 0xf6; |
|||
#define C7IF 0x80 |
|||
#define C6IF 0x40 |
|||
#define C5IF 0x20 |
|||
#define C4IF 0x10 |
|||
#define C3IF 0x08 |
|||
#define C2IF 0x04 |
|||
#define C1IF 0x02 |
|||
#define C0IF 0x01 |
|||
sfr PWMFDCR = 0xf7; |
|||
#define INVCMP 0x80 |
|||
#define INVIO 0x40 |
|||
#define ENFD 0x20 |
|||
#define FLTFLIO 0x10 |
|||
#define EFDI 0x08 |
|||
#define FDCMP 0x04 |
|||
#define FDIO 0x02 |
|||
#define FDIF 0x01 |
|||
sfr PWMCR = 0xfe; |
|||
#define ENPWM 0x80 |
|||
#define ECBI 0x40 |
|||
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
#define PWMC (*(unsigned int volatile xdata *)0xfff0) |
|||
#define PWMCH (*(unsigned char volatile xdata *)0xfff0) |
|||
#define PWMCL (*(unsigned char volatile xdata *)0xfff1) |
|||
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2) |
|||
#define TADCP (*(unsigned char volatile xdata *)0xfff3) |
|||
#define TADCPH (*(unsigned char volatile xdata *)0xfff3) |
|||
#define TADCPL (*(unsigned char volatile xdata *)0xfff4) |
|||
#define PWM0T1 (*(unsigned int volatile xdata *)0xff00) |
|||
#define PWM0T1H (*(unsigned char volatile xdata *)0xff00) |
|||
#define PWM0T1L (*(unsigned char volatile xdata *)0xff01) |
|||
#define PWM0T2 (*(unsigned int volatile xdata *)0xff02) |
|||
#define PWM0T2H (*(unsigned char volatile xdata *)0xff02) |
|||
#define PWM0T2L (*(unsigned char volatile xdata *)0xff03) |
|||
#define PWM0CR (*(unsigned char volatile xdata *)0xff04) |
|||
#define PWM0HLD (*(unsigned char volatile xdata *)0xff05) |
|||
#define PWM1T1 (*(unsigned int volatile xdata *)0xff10) |
|||
#define PWM1T1H (*(unsigned char volatile xdata *)0xff10) |
|||
#define PWM1T1L (*(unsigned char volatile xdata *)0xff11) |
|||
#define PWM1T2 (*(unsigned int volatile xdata *)0xff12) |
|||
#define PWM1T2H (*(unsigned char volatile xdata *)0xff12) |
|||
#define PWM1T2L (*(unsigned char volatile xdata *)0xff13) |
|||
#define PWM1CR (*(unsigned char volatile xdata *)0xff14) |
|||
#define PWM1HLD (*(unsigned char volatile xdata *)0xff15) |
|||
#define PWM2T1 (*(unsigned int volatile xdata *)0xff20) |
|||
#define PWM2T1H (*(unsigned char volatile xdata *)0xff20) |
|||
#define PWM2T1L (*(unsigned char volatile xdata *)0xff21) |
|||
#define PWM2T2 (*(unsigned int volatile xdata *)0xff22) |
|||
#define PWM2T2H (*(unsigned char volatile xdata *)0xff22) |
|||
#define PWM2T2L (*(unsigned char volatile xdata *)0xff23) |
|||
#define PWM2CR (*(unsigned char volatile xdata *)0xff24) |
|||
#define PWM2HLD (*(unsigned char volatile xdata *)0xff25) |
|||
#define PWM3T1 (*(unsigned int volatile xdata *)0xff30) |
|||
#define PWM3T1H (*(unsigned char volatile xdata *)0xff30) |
|||
#define PWM3T1L (*(unsigned char volatile xdata *)0xff31) |
|||
#define PWM3T2 (*(unsigned int volatile xdata *)0xff32) |
|||
#define PWM3T2H (*(unsigned char volatile xdata *)0xff32) |
|||
#define PWM3T2L (*(unsigned char volatile xdata *)0xff33) |
|||
#define PWM3CR (*(unsigned char volatile xdata *)0xff34) |
|||
#define PWM3HLD (*(unsigned char volatile xdata *)0xff35) |
|||
#define PWM4T1 (*(unsigned int volatile xdata *)0xff40) |
|||
#define PWM4T1H (*(unsigned char volatile xdata *)0xff40) |
|||
#define PWM4T1L (*(unsigned char volatile xdata *)0xff41) |
|||
#define PWM4T2 (*(unsigned int volatile xdata *)0xff42) |
|||
#define PWM4T2H (*(unsigned char volatile xdata *)0xff42) |
|||
#define PWM4T2L (*(unsigned char volatile xdata *)0xff43) |
|||
#define PWM4CR (*(unsigned char volatile xdata *)0xff44) |
|||
#define PWM4HLD (*(unsigned char volatile xdata *)0xff45) |
|||
#define PWM5T1 (*(unsigned int volatile xdata *)0xff50) |
|||
#define PWM5T1H (*(unsigned char volatile xdata *)0xff50) |
|||
#define PWM5T1L (*(unsigned char volatile xdata *)0xff51) |
|||
#define PWM5T2 (*(unsigned int volatile xdata *)0xff52) |
|||
#define PWM5T2H (*(unsigned char volatile xdata *)0xff52) |
|||
#define PWM5T2L (*(unsigned char volatile xdata *)0xff53) |
|||
#define PWM5CR (*(unsigned char volatile xdata *)0xff54) |
|||
#define PWM5HLD (*(unsigned char volatile xdata *)0xff55) |
|||
#define PWM6T1 (*(unsigned int volatile xdata *)0xff60) |
|||
#define PWM6T1H (*(unsigned char volatile xdata *)0xff60) |
|||
#define PWM6T1L (*(unsigned char volatile xdata *)0xff61) |
|||
#define PWM6T2 (*(unsigned int volatile xdata *)0xff62) |
|||
#define PWM6T2H (*(unsigned char volatile xdata *)0xff62) |
|||
#define PWM6T2L (*(unsigned char volatile xdata *)0xff63) |
|||
#define PWM6CR (*(unsigned char volatile xdata *)0xff64) |
|||
#define PWM6HLD (*(unsigned char volatile xdata *)0xff65) |
|||
#define PWM7T1 (*(unsigned int volatile xdata *)0xff70) |
|||
#define PWM7T1H (*(unsigned char volatile xdata *)0xff70) |
|||
#define PWM7T1L (*(unsigned char volatile xdata *)0xff71) |
|||
#define PWM7T2 (*(unsigned int volatile xdata *)0xff72) |
|||
#define PWM7T2H (*(unsigned char volatile xdata *)0xff72) |
|||
#define PWM7T2L (*(unsigned char volatile xdata *)0xff73) |
|||
#define PWM7CR (*(unsigned char volatile xdata *)0xff74) |
|||
#define PWM7HLD (*(unsigned char volatile xdata *)0xff75) |
|||
|
|||
//I2C特殊功能寄存器
|
|||
//如下特殊功能寄存器位于扩展RAM区域
|
|||
//访问这些寄存器,需先将P_SW2的BIT7设置为1,才可正常读写
|
|||
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) |
|||
#define ENI2C 0x80 |
|||
#define MSSL 0x40 |
|||
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) |
|||
#define EMSI 0x80 |
|||
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) |
|||
#define MSBUSY 0x80 |
|||
#define MSIF 0x40 |
|||
#define MSACKI 0x02 |
|||
#define MSACKO 0x01 |
|||
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) |
|||
#define ESTAI 0x40 |
|||
#define ERXI 0x20 |
|||
#define ETXI 0x10 |
|||
#define ESTOI 0x08 |
|||
#define SLRST 0x01 |
|||
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) |
|||
#define SLBUSY 0x80 |
|||
#define STAIF 0x40 |
|||
#define RXIF 0x20 |
|||
#define TXIF 0x10 |
|||
#define STOIF 0x08 |
|||
#define TXING 0x04 |
|||
#define SLACKI 0x02 |
|||
#define SLACKO 0x01 |
|||
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) |
|||
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) |
|||
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#endif |
|||
|
|||
|
|||
@ -1,640 +0,0 @@ |
|||
#ifndef __STC8H_H__ |
|||
#define __STC8H_H__ |
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
//������ͷ�ļ���,���������ٰ���"REG51.H"
|
|||
|
|||
sfr P0 = 0x80; |
|||
sbit P00 = P0^0; |
|||
sbit P01 = P0^1; |
|||
sbit P02 = P0^2; |
|||
sbit P03 = P0^3; |
|||
sbit P04 = P0^4; |
|||
sbit P05 = P0^5; |
|||
sbit P06 = P0^6; |
|||
sbit P07 = P0^7; |
|||
sfr SP = 0x81; |
|||
sfr DPL = 0x82; |
|||
sfr DPH = 0x83; |
|||
sfr S4CON = 0x84; |
|||
sfr S4BUF = 0x85; |
|||
sfr PCON = 0x87; |
|||
sfr TCON = 0x88; |
|||
sbit TF1 = TCON^7; |
|||
sbit TR1 = TCON^6; |
|||
sbit TF0 = TCON^5; |
|||
sbit TR0 = TCON^4; |
|||
sbit IE1 = TCON^3; |
|||
sbit IT1 = TCON^2; |
|||
sbit IE0 = TCON^1; |
|||
sbit IT0 = TCON^0; |
|||
sfr TMOD = 0x89; |
|||
sfr TL0 = 0x8a; |
|||
sfr TL1 = 0x8b; |
|||
sfr TH0 = 0x8c; |
|||
sfr TH1 = 0x8d; |
|||
sfr AUXR = 0x8e; |
|||
sfr INTCLKO = 0x8f; |
|||
sfr P1 = 0x90; |
|||
sbit P10 = P1^0; |
|||
sbit P11 = P1^1; |
|||
sbit P12 = P1^2; |
|||
sbit P13 = P1^3; |
|||
sbit P14 = P1^4; |
|||
sbit P15 = P1^5; |
|||
sbit P16 = P1^6; |
|||
sbit P17 = P1^7; |
|||
sfr P1M1 = 0x91; |
|||
sfr P1M0 = 0x92; |
|||
sfr P0M1 = 0x93; |
|||
sfr P0M0 = 0x94; |
|||
sfr P2M1 = 0x95; |
|||
sfr P2M0 = 0x96; |
|||
sfr SCON = 0x98; |
|||
sbit SM0 = SCON^7; |
|||
sbit SM1 = SCON^6; |
|||
sbit SM2 = SCON^5; |
|||
sbit REN = SCON^4; |
|||
sbit TB8 = SCON^3; |
|||
sbit RB8 = SCON^2; |
|||
sbit TI = SCON^1; |
|||
sbit RI = SCON^0; |
|||
sfr SBUF = 0x99; |
|||
sfr S2CON = 0x9a; |
|||
sfr S2BUF = 0x9b; |
|||
sfr IRCBAND = 0x9d; |
|||
sfr LIRTRIM = 0x9e; |
|||
sfr IRTRIM = 0x9f; |
|||
sfr P2 = 0xa0; |
|||
sbit P20 = P2^0; |
|||
sbit P21 = P2^1; |
|||
sbit P22 = P2^2; |
|||
sbit P23 = P2^3; |
|||
sbit P24 = P2^4; |
|||
sbit P25 = P2^5; |
|||
sbit P26 = P2^6; |
|||
sbit P27 = P2^7; |
|||
sfr P_SW1 = 0xa2; |
|||
sfr IE = 0xa8; |
|||
sbit EA = IE^7; |
|||
sbit ELVD = IE^6; |
|||
sbit EADC = IE^5; |
|||
sbit ES = IE^4; |
|||
sbit ET1 = IE^3; |
|||
sbit EX1 = IE^2; |
|||
sbit ET0 = IE^1; |
|||
sbit EX0 = IE^0; |
|||
sfr SADDR = 0xa9; |
|||
sfr WKTCL = 0xaa; |
|||
sfr WKTCH = 0xab; |
|||
sfr S3CON = 0xac; |
|||
sfr S3BUF = 0xad; |
|||
sfr TA = 0xae; |
|||
sfr IE2 = 0xaf; |
|||
sfr P3 = 0xb0; |
|||
sbit P30 = P3^0; |
|||
sbit P31 = P3^1; |
|||
sbit P32 = P3^2; |
|||
sbit P33 = P3^3; |
|||
sbit P34 = P3^4; |
|||
sbit P35 = P3^5; |
|||
sbit P36 = P3^6; |
|||
sbit P37 = P3^7; |
|||
sfr P3M1 = 0xb1; |
|||
sfr P3M0 = 0xb2; |
|||
sfr P4M1 = 0xb3; |
|||
sfr P4M0 = 0xb4; |
|||
sfr IP2 = 0xb5; |
|||
sfr IP2H = 0xb6; |
|||
sfr IPH = 0xb7; |
|||
sfr IP = 0xb8; |
|||
sbit PPCA = IP^7; |
|||
sbit PLVD = IP^6; |
|||
sbit PADC = IP^5; |
|||
sbit PS = IP^4; |
|||
sbit PT1 = IP^3; |
|||
sbit PX1 = IP^2; |
|||
sbit PT0 = IP^1; |
|||
sbit PX0 = IP^0; |
|||
sfr SADEN = 0xb9; |
|||
sfr P_SW2 = 0xba; |
|||
sfr ADC_CONTR = 0xbc; |
|||
sfr ADC_RES = 0xbd; |
|||
sfr ADC_RESL = 0xbe; |
|||
sfr P4 = 0xc0; |
|||
sbit P40 = P4^0; |
|||
sbit P41 = P4^1; |
|||
sbit P42 = P4^2; |
|||
sbit P43 = P4^3; |
|||
sbit P44 = P4^4; |
|||
sbit P45 = P4^5; |
|||
sbit P46 = P4^6; |
|||
sbit P47 = P4^7; |
|||
sfr WDT_CONTR = 0xc1; |
|||
sfr IAP_DATA = 0xc2; |
|||
sfr IAP_ADDRH = 0xc3; |
|||
sfr IAP_ADDRL = 0xc4; |
|||
sfr IAP_CMD = 0xc5; |
|||
sfr IAP_TRIG = 0xc6; |
|||
sfr IAP_CONTR = 0xc7; |
|||
sfr P5 = 0xc8; |
|||
sbit P50 = P5^0; |
|||
sbit P51 = P5^1; |
|||
sbit P52 = P5^2; |
|||
sbit P53 = P5^3; |
|||
sbit P54 = P5^4; |
|||
sbit P55 = P5^5; |
|||
sbit P56 = P5^6; |
|||
sbit P57 = P5^7; |
|||
sfr P5M1 = 0xc9; |
|||
sfr P5M0 = 0xca; |
|||
sfr P6M1 = 0xcb; |
|||
sfr P6M0 = 0xcc; |
|||
sfr SPSTAT = 0xcd; |
|||
sfr SPCTL = 0xce; |
|||
sfr SPDAT = 0xcf; |
|||
sfr PSW = 0xd0; |
|||
sbit CY = PSW^7; |
|||
sbit AC = PSW^6; |
|||
sbit F0 = PSW^5; |
|||
sbit RS1 = PSW^4; |
|||
sbit RS0 = PSW^3; |
|||
sbit OV = PSW^2; |
|||
sbit F1 = PSW^1; |
|||
sbit P = PSW^0; |
|||
sfr T4T3M = 0xd1; |
|||
sfr T4H = 0xd2; |
|||
sfr T4L = 0xd3; |
|||
sfr T3H = 0xd4; |
|||
sfr T3L = 0xd5; |
|||
sfr T2H = 0xd6; |
|||
sfr T2L = 0xd7; |
|||
sfr USBCLK = 0xdc; |
|||
sfr ADCCFG = 0xde; |
|||
sfr IP3 = 0xdf; |
|||
sfr ACC = 0xe0; |
|||
sfr P7M1 = 0xe1; |
|||
sfr P7M0 = 0xe2; |
|||
sfr DPS = 0xe3; |
|||
sfr DPL1 = 0xe4; |
|||
sfr DPH1 = 0xe5; |
|||
sfr CMPCR1 = 0xe6; |
|||
sfr CMPCR2 = 0xe7; |
|||
sfr P6 = 0xe8; |
|||
sfr USBDAT = 0xec; |
|||
sfr IP3H = 0xee; |
|||
sfr AUXINTIF = 0xef; |
|||
sfr B = 0xf0; |
|||
sfr USBCON = 0xf4; |
|||
sfr IAP_TPS = 0xf5; |
|||
sfr P7 = 0xf8; |
|||
sfr USBADR = 0xfc; |
|||
sfr RSTCFG = 0xff; |
|||
|
|||
//��������ܼĴ���λ����չRAM����
|
|||
//������Щ�Ĵ���,���Ƚ�P_SW2��BIT7����Ϊ1,�ſ�������д
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FF00H-FFFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FE00H-FEFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#define CKSEL (*(unsigned char volatile xdata *)0xfe00) |
|||
#define CLKDIV (*(unsigned char volatile xdata *)0xfe01) |
|||
#define HIRCCR (*(unsigned char volatile xdata *)0xfe02) |
|||
#define XOSCCR (*(unsigned char volatile xdata *)0xfe03) |
|||
#define IRC32KCR (*(unsigned char volatile xdata *)0xfe04) |
|||
#define MCLKOCR (*(unsigned char volatile xdata *)0xfe05) |
|||
#define IRCDB (*(unsigned char volatile xdata *)0xfe06) |
|||
#define X32KCR (*(unsigned char volatile xdata *)0xfe08) |
|||
|
|||
#define P0PU (*(unsigned char volatile xdata *)0xfe10) |
|||
#define P1PU (*(unsigned char volatile xdata *)0xfe11) |
|||
#define P2PU (*(unsigned char volatile xdata *)0xfe12) |
|||
#define P3PU (*(unsigned char volatile xdata *)0xfe13) |
|||
#define P4PU (*(unsigned char volatile xdata *)0xfe14) |
|||
#define P5PU (*(unsigned char volatile xdata *)0xfe15) |
|||
#define P6PU (*(unsigned char volatile xdata *)0xfe16) |
|||
#define P7PU (*(unsigned char volatile xdata *)0xfe17) |
|||
#define P0NCS (*(unsigned char volatile xdata *)0xfe18) |
|||
#define P1NCS (*(unsigned char volatile xdata *)0xfe19) |
|||
#define P2NCS (*(unsigned char volatile xdata *)0xfe1a) |
|||
#define P3NCS (*(unsigned char volatile xdata *)0xfe1b) |
|||
#define P4NCS (*(unsigned char volatile xdata *)0xfe1c) |
|||
#define P5NCS (*(unsigned char volatile xdata *)0xfe1d) |
|||
#define P6NCS (*(unsigned char volatile xdata *)0xfe1e) |
|||
#define P7NCS (*(unsigned char volatile xdata *)0xfe1f) |
|||
#define P0SR (*(unsigned char volatile xdata *)0xfe20) |
|||
#define P1SR (*(unsigned char volatile xdata *)0xfe21) |
|||
#define P2SR (*(unsigned char volatile xdata *)0xfe22) |
|||
#define P3SR (*(unsigned char volatile xdata *)0xfe23) |
|||
#define P4SR (*(unsigned char volatile xdata *)0xfe24) |
|||
#define P5SR (*(unsigned char volatile xdata *)0xfe25) |
|||
#define P6SR (*(unsigned char volatile xdata *)0xfe26) |
|||
#define P7SR (*(unsigned char volatile xdata *)0xfe27) |
|||
#define P0DR (*(unsigned char volatile xdata *)0xfe28) |
|||
#define P1DR (*(unsigned char volatile xdata *)0xfe29) |
|||
#define P2DR (*(unsigned char volatile xdata *)0xfe2a) |
|||
#define P3DR (*(unsigned char volatile xdata *)0xfe2b) |
|||
#define P4DR (*(unsigned char volatile xdata *)0xfe2c) |
|||
#define P5DR (*(unsigned char volatile xdata *)0xfe2d) |
|||
#define P6DR (*(unsigned char volatile xdata *)0xfe2e) |
|||
#define P7DR (*(unsigned char volatile xdata *)0xfe2f) |
|||
#define P0IE (*(unsigned char volatile xdata *)0xfe30) |
|||
#define P1IE (*(unsigned char volatile xdata *)0xfe31) |
|||
#define P2IE (*(unsigned char volatile xdata *)0xfe32) |
|||
#define P3IE (*(unsigned char volatile xdata *)0xfe33) |
|||
#define P4IE (*(unsigned char volatile xdata *)0xfe34) |
|||
#define P5IE (*(unsigned char volatile xdata *)0xfe35) |
|||
#define P6IE (*(unsigned char volatile xdata *)0xfe36) |
|||
#define P7IE (*(unsigned char volatile xdata *)0xfe37) |
|||
|
|||
#define RTCCR (*(unsigned char volatile xdata *)0xfe60) |
|||
#define RTCCFG (*(unsigned char volatile xdata *)0xfe61) |
|||
#define RTCIEN (*(unsigned char volatile xdata *)0xfe62) |
|||
#define RTCIF (*(unsigned char volatile xdata *)0xfe63) |
|||
#define ALAHOUR (*(unsigned char volatile xdata *)0xfe64) |
|||
#define ALAMIN (*(unsigned char volatile xdata *)0xfe65) |
|||
#define ALASEC (*(unsigned char volatile xdata *)0xfe66) |
|||
#define ALASSEC (*(unsigned char volatile xdata *)0xfe67) |
|||
#define INIYEAR (*(unsigned char volatile xdata *)0xfe68) |
|||
#define INIMONTH (*(unsigned char volatile xdata *)0xfe69) |
|||
#define INIDAY (*(unsigned char volatile xdata *)0xfe6a) |
|||
#define INIHOUR (*(unsigned char volatile xdata *)0xfe6b) |
|||
#define INIMIN (*(unsigned char volatile xdata *)0xfe6c) |
|||
#define INISEC (*(unsigned char volatile xdata *)0xfe6d) |
|||
#define INISSEC (*(unsigned char volatile xdata *)0xfe6e) |
|||
#define YEAR (*(unsigned char volatile xdata *)0xfe70) |
|||
#define MONTH (*(unsigned char volatile xdata *)0xfe71) |
|||
#define DAY (*(unsigned char volatile xdata *)0xfe72) |
|||
#define HOUR (*(unsigned char volatile xdata *)0xfe73) |
|||
#define MIN (*(unsigned char volatile xdata *)0xfe74) |
|||
#define SEC (*(unsigned char volatile xdata *)0xfe75) |
|||
#define SSEC (*(unsigned char volatile xdata *)0xfe76) |
|||
|
|||
#define I2CCFG (*(unsigned char volatile xdata *)0xfe80) |
|||
#define I2CMSCR (*(unsigned char volatile xdata *)0xfe81) |
|||
#define I2CMSST (*(unsigned char volatile xdata *)0xfe82) |
|||
#define I2CSLCR (*(unsigned char volatile xdata *)0xfe83) |
|||
#define I2CSLST (*(unsigned char volatile xdata *)0xfe84) |
|||
#define I2CSLADR (*(unsigned char volatile xdata *)0xfe85) |
|||
#define I2CTXD (*(unsigned char volatile xdata *)0xfe86) |
|||
#define I2CRXD (*(unsigned char volatile xdata *)0xfe87) |
|||
#define I2CMSAUX (*(unsigned char volatile xdata *)0xfe88) |
|||
#define TM2PS (*(unsigned char volatile xdata *)0xfea2) |
|||
#define TM3PS (*(unsigned char volatile xdata *)0xfea3) |
|||
#define TM4PS (*(unsigned char volatile xdata *)0xfea4) |
|||
#define ADCTIM (*(unsigned char volatile xdata *)0xfea8) |
|||
|
|||
#define PWM1_ETRPS (*(unsigned char volatile xdata *)0xfeb0) |
|||
#define PWM1_ENO (*(unsigned char volatile xdata *)0xfeb1) |
|||
#define PWM1_PS (*(unsigned char volatile xdata *)0xfeb2) |
|||
#define PWM1_IOAUX (*(unsigned char volatile xdata *)0xfeb3) |
|||
#define PWM2_ETRPS (*(unsigned char volatile xdata *)0xfeb4) |
|||
#define PWM2_ENO (*(unsigned char volatile xdata *)0xfeb5) |
|||
#define PWM2_PS (*(unsigned char volatile xdata *)0xfeb6) |
|||
#define PWM2_IOAUX (*(unsigned char volatile xdata *)0xfeb7) |
|||
#define PWM1_CR1 (*(unsigned char volatile xdata *)0xfec0) |
|||
#define PWM1_CR2 (*(unsigned char volatile xdata *)0xfec1) |
|||
#define PWM1_SMCR (*(unsigned char volatile xdata *)0xfec2) |
|||
#define PWM1_ETR (*(unsigned char volatile xdata *)0xfec3) |
|||
#define PWM1_IER (*(unsigned char volatile xdata *)0xfec4) |
|||
#define PWM1_SR1 (*(unsigned char volatile xdata *)0xfec5) |
|||
#define PWM1_SR2 (*(unsigned char volatile xdata *)0xfec6) |
|||
#define PWM1_EGR (*(unsigned char volatile xdata *)0xfec7) |
|||
#define PWM1_CCMR1 (*(unsigned char volatile xdata *)0xfec8) |
|||
#define PWM1_CCMR2 (*(unsigned char volatile xdata *)0xfec9) |
|||
#define PWM1_CCMR3 (*(unsigned char volatile xdata *)0xfeca) |
|||
#define PWM1_CCMR4 (*(unsigned char volatile xdata *)0xfecb) |
|||
#define PWM1_CCER1 (*(unsigned char volatile xdata *)0xfecc) |
|||
#define PWM1_CCER2 (*(unsigned char volatile xdata *)0xfecd) |
|||
#define PWM1_CNTR (*(unsigned int volatile xdata *)0xfece) |
|||
#define PWM1_CNTRH (*(unsigned char volatile xdata *)0xfece) |
|||
#define PWM1_CNTRL (*(unsigned char volatile xdata *)0xfecf) |
|||
#define PWM1_PSCR (*(unsigned int volatile xdata *)0xfed0) |
|||
#define PWM1_PSCRH (*(unsigned char volatile xdata *)0xfed0) |
|||
#define PWM1_PSCRL (*(unsigned char volatile xdata *)0xfed1) |
|||
#define PWM1_ARR (*(unsigned int volatile xdata *)0xfed2) |
|||
#define PWM1_ARRH (*(unsigned char volatile xdata *)0xfed2) |
|||
#define PWM1_ARRL (*(unsigned char volatile xdata *)0xfed3) |
|||
#define PWM1_RCR (*(unsigned char volatile xdata *)0xfed4) |
|||
#define PWM1_CCR1 (*(unsigned int volatile xdata *)0xfed5) |
|||
#define PWM1_CCR1H (*(unsigned char volatile xdata *)0xfed5) |
|||
#define PWM1_CCR1L (*(unsigned char volatile xdata *)0xfed6) |
|||
#define PWM1_CCR2 (*(unsigned int volatile xdata *)0xfed7) |
|||
#define PWM1_CCR2H (*(unsigned char volatile xdata *)0xfed7) |
|||
#define PWM1_CCR2L (*(unsigned char volatile xdata *)0xfed8) |
|||
#define PWM1_CCR3 (*(unsigned int volatile xdata *)0xfed9) |
|||
#define PWM1_CCR3H (*(unsigned char volatile xdata *)0xfed9) |
|||
#define PWM1_CCR3L (*(unsigned char volatile xdata *)0xfeda) |
|||
#define PWM1_CCR4 (*(unsigned int volatile xdata *)0xfedb) |
|||
#define PWM1_CCR4H (*(unsigned char volatile xdata *)0xfedb) |
|||
#define PWM1_CCR4L (*(unsigned char volatile xdata *)0xfedc) |
|||
#define PWM1_BKR (*(unsigned char volatile xdata *)0xfedd) |
|||
#define PWM1_DTR (*(unsigned char volatile xdata *)0xfede) |
|||
#define PWM1_OISR (*(unsigned char volatile xdata *)0xfedf) |
|||
#define PWM2_CR1 (*(unsigned char volatile xdata *)0xfee0) |
|||
#define PWM2_CR2 (*(unsigned char volatile xdata *)0xfee1) |
|||
#define PWM2_SMCR (*(unsigned char volatile xdata *)0xfee2) |
|||
#define PWM2_ETR (*(unsigned char volatile xdata *)0xfee3) |
|||
#define PWM2_IER (*(unsigned char volatile xdata *)0xfee4) |
|||
#define PWM2_SR1 (*(unsigned char volatile xdata *)0xfee5) |
|||
#define PWM2_SR2 (*(unsigned char volatile xdata *)0xfee6) |
|||
#define PWM2_EGR (*(unsigned char volatile xdata *)0xfee7) |
|||
#define PWM2_CCMR1 (*(unsigned char volatile xdata *)0xfee8) |
|||
#define PWM2_CCMR2 (*(unsigned char volatile xdata *)0xfee9) |
|||
#define PWM2_CCMR3 (*(unsigned char volatile xdata *)0xfeea) |
|||
#define PWM2_CCMR4 (*(unsigned char volatile xdata *)0xfeeb) |
|||
#define PWM2_CCER1 (*(unsigned char volatile xdata *)0xfeec) |
|||
#define PWM2_CCER2 (*(unsigned char volatile xdata *)0xfeed) |
|||
#define PWM2_CNTR (*(unsigned int volatile xdata *)0xfeee) |
|||
#define PWM2_CNTRH (*(unsigned char volatile xdata *)0xfeee) |
|||
#define PWM2_CNTRL (*(unsigned char volatile xdata *)0xfeef) |
|||
#define PWM2_PSCR (*(unsigned int volatile xdata *)0xfef0) |
|||
#define PWM2_PSCRH (*(unsigned char volatile xdata *)0xfef0) |
|||
#define PWM2_PSCRL (*(unsigned char volatile xdata *)0xfef1) |
|||
#define PWM2_ARR (*(unsigned int volatile xdata *)0xfef2) |
|||
#define PWM2_ARRH (*(unsigned char volatile xdata *)0xfef2) |
|||
#define PWM2_ARRL (*(unsigned char volatile xdata *)0xfef3) |
|||
#define PWM2_RCR (*(unsigned char volatile xdata *)0xfef4) |
|||
#define PWM2_CCR1 (*(unsigned int volatile xdata *)0xfef5) |
|||
#define PWM2_CCR1H (*(unsigned char volatile xdata *)0xfef5) |
|||
#define PWM2_CCR1L (*(unsigned char volatile xdata *)0xfef6) |
|||
#define PWM2_CCR2 (*(unsigned int volatile xdata *)0xfef7) |
|||
#define PWM2_CCR2H (*(unsigned char volatile xdata *)0xfef7) |
|||
#define PWM2_CCR2L (*(unsigned char volatile xdata *)0xfef8) |
|||
#define PWM2_CCR3 (*(unsigned int volatile xdata *)0xfef9) |
|||
#define PWM2_CCR3H (*(unsigned char volatile xdata *)0xfef9) |
|||
#define PWM2_CCR3L (*(unsigned char volatile xdata *)0xfefa) |
|||
#define PWM2_CCR4 (*(unsigned int volatile xdata *)0xfefb) |
|||
#define PWM2_CCR4H (*(unsigned char volatile xdata *)0xfefb) |
|||
#define PWM2_CCR4L (*(unsigned char volatile xdata *)0xfefc) |
|||
#define PWM2_BKR (*(unsigned char volatile xdata *)0xfefd) |
|||
#define PWM2_DTR (*(unsigned char volatile xdata *)0xfefe) |
|||
#define PWM2_OISR (*(unsigned char volatile xdata *)0xfeff) |
|||
|
|||
#define PWMA_ETRPS (*(unsigned char volatile xdata *)0xfeb0) |
|||
#define PWMA_ENO (*(unsigned char volatile xdata *)0xfeb1) |
|||
#define PWMA_PS (*(unsigned char volatile xdata *)0xfeb2) |
|||
#define PWMA_IOAUX (*(unsigned char volatile xdata *)0xfeb3) |
|||
#define PWMB_ETRPS (*(unsigned char volatile xdata *)0xfeb4) |
|||
#define PWMB_ENO (*(unsigned char volatile xdata *)0xfeb5) |
|||
#define PWMB_PS (*(unsigned char volatile xdata *)0xfeb6) |
|||
#define PWMB_IOAUX (*(unsigned char volatile xdata *)0xfeb7) |
|||
#define PWMA_CR1 (*(unsigned char volatile xdata *)0xfec0) |
|||
#define PWMA_CR2 (*(unsigned char volatile xdata *)0xfec1) |
|||
#define PWMA_SMCR (*(unsigned char volatile xdata *)0xfec2) |
|||
#define PWMA_ETR (*(unsigned char volatile xdata *)0xfec3) |
|||
#define PWMA_IER (*(unsigned char volatile xdata *)0xfec4) |
|||
#define PWMA_SR1 (*(unsigned char volatile xdata *)0xfec5) |
|||
#define PWMA_SR2 (*(unsigned char volatile xdata *)0xfec6) |
|||
#define PWMA_EGR (*(unsigned char volatile xdata *)0xfec7) |
|||
#define PWMA_CCMR1 (*(unsigned char volatile xdata *)0xfec8) |
|||
#define PWMA_CCMR2 (*(unsigned char volatile xdata *)0xfec9) |
|||
#define PWMA_CCMR3 (*(unsigned char volatile xdata *)0xfeca) |
|||
#define PWMA_CCMR4 (*(unsigned char volatile xdata *)0xfecb) |
|||
#define PWMA_CCER1 (*(unsigned char volatile xdata *)0xfecc) |
|||
#define PWMA_CCER2 (*(unsigned char volatile xdata *)0xfecd) |
|||
#define PWMA_CNTR (*(unsigned int volatile xdata *)0xfece) |
|||
#define PWMA_CNTRH (*(unsigned char volatile xdata *)0xfece) |
|||
#define PWMA_CNTRL (*(unsigned char volatile xdata *)0xfecf) |
|||
#define PWMA_PSCR (*(unsigned int volatile xdata *)0xfed0) |
|||
#define PWMA_PSCRH (*(unsigned char volatile xdata *)0xfed0) |
|||
#define PWMA_PSCRL (*(unsigned char volatile xdata *)0xfed1) |
|||
#define PWMA_ARR (*(unsigned int volatile xdata *)0xfed2) |
|||
#define PWMA_ARRH (*(unsigned char volatile xdata *)0xfed2) |
|||
#define PWMA_ARRL (*(unsigned char volatile xdata *)0xfed3) |
|||
#define PWMA_RCR (*(unsigned char volatile xdata *)0xfed4) |
|||
#define PWMA_CCR1 (*(unsigned int volatile xdata *)0xfed5) |
|||
#define PWMA_CCR1H (*(unsigned char volatile xdata *)0xfed5) |
|||
#define PWMA_CCR1L (*(unsigned char volatile xdata *)0xfed6) |
|||
#define PWMA_CCR2 (*(unsigned int volatile xdata *)0xfed7) |
|||
#define PWMA_CCR2H (*(unsigned char volatile xdata *)0xfed7) |
|||
#define PWMA_CCR2L (*(unsigned char volatile xdata *)0xfed8) |
|||
#define PWMA_CCR3 (*(unsigned int volatile xdata *)0xfed9) |
|||
#define PWMA_CCR3H (*(unsigned char volatile xdata *)0xfed9) |
|||
#define PWMA_CCR3L (*(unsigned char volatile xdata *)0xfeda) |
|||
#define PWMA_CCR4 (*(unsigned int volatile xdata *)0xfedb) |
|||
#define PWMA_CCR4H (*(unsigned char volatile xdata *)0xfedb) |
|||
#define PWMA_CCR4L (*(unsigned char volatile xdata *)0xfedc) |
|||
#define PWMA_BKR (*(unsigned char volatile xdata *)0xfedd) |
|||
#define PWMA_DTR (*(unsigned char volatile xdata *)0xfede) |
|||
#define PWMA_OISR (*(unsigned char volatile xdata *)0xfedf) |
|||
#define PWMB_CR1 (*(unsigned char volatile xdata *)0xfee0) |
|||
#define PWMB_CR2 (*(unsigned char volatile xdata *)0xfee1) |
|||
#define PWMB_SMCR (*(unsigned char volatile xdata *)0xfee2) |
|||
#define PWMB_ETR (*(unsigned char volatile xdata *)0xfee3) |
|||
#define PWMB_IER (*(unsigned char volatile xdata *)0xfee4) |
|||
#define PWMB_SR1 (*(unsigned char volatile xdata *)0xfee5) |
|||
#define PWMB_SR2 (*(unsigned char volatile xdata *)0xfee6) |
|||
#define PWMB_EGR (*(unsigned char volatile xdata *)0xfee7) |
|||
#define PWMB_CCMR1 (*(unsigned char volatile xdata *)0xfee8) |
|||
#define PWMB_CCMR2 (*(unsigned char volatile xdata *)0xfee9) |
|||
#define PWMB_CCMR3 (*(unsigned char volatile xdata *)0xfeea) |
|||
#define PWMB_CCMR4 (*(unsigned char volatile xdata *)0xfeeb) |
|||
#define PWMB_CCER1 (*(unsigned char volatile xdata *)0xfeec) |
|||
#define PWMB_CCER2 (*(unsigned char volatile xdata *)0xfeed) |
|||
#define PWMB_CNTR (*(unsigned int volatile xdata *)0xfeee) |
|||
#define PWMB_CNTRH (*(unsigned char volatile xdata *)0xfeee) |
|||
#define PWMB_CNTRL (*(unsigned char volatile xdata *)0xfeef) |
|||
#define PWMB_PSCR (*(unsigned int volatile xdata *)0xfef0) |
|||
#define PWMB_PSCRH (*(unsigned char volatile xdata *)0xfef0) |
|||
#define PWMB_PSCRL (*(unsigned char volatile xdata *)0xfef1) |
|||
#define PWMB_ARR (*(unsigned int volatile xdata *)0xfef2) |
|||
#define PWMB_ARRH (*(unsigned char volatile xdata *)0xfef2) |
|||
#define PWMB_ARRL (*(unsigned char volatile xdata *)0xfef3) |
|||
#define PWMB_RCR (*(unsigned char volatile xdata *)0xfef4) |
|||
#define PWMB_CCR5 (*(unsigned int volatile xdata *)0xfef5) |
|||
#define PWMB_CCR5H (*(unsigned char volatile xdata *)0xfef5) |
|||
#define PWMB_CCR5L (*(unsigned char volatile xdata *)0xfef6) |
|||
#define PWMB_CCR6 (*(unsigned int volatile xdata *)0xfef7) |
|||
#define PWMB_CCR6H (*(unsigned char volatile xdata *)0xfef7) |
|||
#define PWMB_CCR6L (*(unsigned char volatile xdata *)0xfef8) |
|||
#define PWMB_CCR7 (*(unsigned int volatile xdata *)0xfef9) |
|||
#define PWMB_CCR7H (*(unsigned char volatile xdata *)0xfef9) |
|||
#define PWMB_CCR7L (*(unsigned char volatile xdata *)0xfefa) |
|||
#define PWMB_CCR8 (*(unsigned int volatile xdata *)0xfefb) |
|||
#define PWMB_CCR8H (*(unsigned char volatile xdata *)0xfefb) |
|||
#define PWMB_CCR8L (*(unsigned char volatile xdata *)0xfefc) |
|||
#define PWMB_BKR (*(unsigned char volatile xdata *)0xfefd) |
|||
#define PWMB_DTR (*(unsigned char volatile xdata *)0xfefe) |
|||
#define PWMB_OISR (*(unsigned char volatile xdata *)0xfeff) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FD00H-FDFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#define P0INTE (*(unsigned char volatile xdata *)0xfd00) |
|||
#define P1INTE (*(unsigned char volatile xdata *)0xfd01) |
|||
#define P2INTE (*(unsigned char volatile xdata *)0xfd02) |
|||
#define P3INTE (*(unsigned char volatile xdata *)0xfd03) |
|||
#define P4INTE (*(unsigned char volatile xdata *)0xfd04) |
|||
#define P5INTE (*(unsigned char volatile xdata *)0xfd05) |
|||
#define P6INTE (*(unsigned char volatile xdata *)0xfd06) |
|||
#define P7INTE (*(unsigned char volatile xdata *)0xfd07) |
|||
#define P0INTF (*(unsigned char volatile xdata *)0xfd10) |
|||
#define P1INTF (*(unsigned char volatile xdata *)0xfd11) |
|||
#define P2INTF (*(unsigned char volatile xdata *)0xfd12) |
|||
#define P3INTF (*(unsigned char volatile xdata *)0xfd13) |
|||
#define P4INTF (*(unsigned char volatile xdata *)0xfd14) |
|||
#define P5INTF (*(unsigned char volatile xdata *)0xfd15) |
|||
#define P6INTF (*(unsigned char volatile xdata *)0xfd16) |
|||
#define P7INTF (*(unsigned char volatile xdata *)0xfd17) |
|||
#define P0IM0 (*(unsigned char volatile xdata *)0xfd20) |
|||
#define P1IM0 (*(unsigned char volatile xdata *)0xfd21) |
|||
#define P2IM0 (*(unsigned char volatile xdata *)0xfd22) |
|||
#define P3IM0 (*(unsigned char volatile xdata *)0xfd23) |
|||
#define P4IM0 (*(unsigned char volatile xdata *)0xfd24) |
|||
#define P5IM0 (*(unsigned char volatile xdata *)0xfd25) |
|||
#define P6IM0 (*(unsigned char volatile xdata *)0xfd26) |
|||
#define P7IM0 (*(unsigned char volatile xdata *)0xfd27) |
|||
#define P0IM1 (*(unsigned char volatile xdata *)0xfd30) |
|||
#define P1IM1 (*(unsigned char volatile xdata *)0xfd31) |
|||
#define P2IM1 (*(unsigned char volatile xdata *)0xfd32) |
|||
#define P3IM1 (*(unsigned char volatile xdata *)0xfd33) |
|||
#define P4IM1 (*(unsigned char volatile xdata *)0xfd34) |
|||
#define P5IM1 (*(unsigned char volatile xdata *)0xfd35) |
|||
#define P6IM1 (*(unsigned char volatile xdata *)0xfd36) |
|||
#define P7IM1 (*(unsigned char volatile xdata *)0xfd37) |
|||
#define P0WKUE (*(unsigned char volatile xdata *)0xfd40) |
|||
#define P1WKUE (*(unsigned char volatile xdata *)0xfd41) |
|||
#define P2WKUE (*(unsigned char volatile xdata *)0xfd42) |
|||
#define P3WKUE (*(unsigned char volatile xdata *)0xfd43) |
|||
#define P4WKUE (*(unsigned char volatile xdata *)0xfd44) |
|||
#define P5WKUE (*(unsigned char volatile xdata *)0xfd45) |
|||
#define P6WKUE (*(unsigned char volatile xdata *)0xfd46) |
|||
#define P7WKUE (*(unsigned char volatile xdata *)0xfd47) |
|||
#define PIN_IP (*(unsigned char volatile xdata *)0xfd60) |
|||
#define PIN_IPH (*(unsigned char volatile xdata *)0xfd61) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FC00H-FCFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#define MD3 (*(unsigned char volatile xdata *)0xfcf0) |
|||
#define MD2 (*(unsigned char volatile xdata *)0xfcf1) |
|||
#define MD1 (*(unsigned char volatile xdata *)0xfcf2) |
|||
#define MD0 (*(unsigned char volatile xdata *)0xfcf3) |
|||
#define MD5 (*(unsigned char volatile xdata *)0xfcf4) |
|||
#define MD4 (*(unsigned char volatile xdata *)0xfcf5) |
|||
#define ARCON (*(unsigned char volatile xdata *)0xfcf6) |
|||
#define OPCON (*(unsigned char volatile xdata *)0xfcf7) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FB00H-FBFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#define COMEN (*(unsigned char volatile xdata *)0xfb00) |
|||
#define SEGENL (*(unsigned char volatile xdata *)0xfb01) |
|||
#define SEGENH (*(unsigned char volatile xdata *)0xfb02) |
|||
#define LEDCTRL (*(unsigned char volatile xdata *)0xfb03) |
|||
#define LEDCKS (*(unsigned char volatile xdata *)0xfb04) |
|||
#define COM0_DA_L (*(unsigned char volatile xdata *)0xfb10) |
|||
#define COM1_DA_L (*(unsigned char volatile xdata *)0xfb11) |
|||
#define COM2_DA_L (*(unsigned char volatile xdata *)0xfb12) |
|||
#define COM3_DA_L (*(unsigned char volatile xdata *)0xfb13) |
|||
#define COM4_DA_L (*(unsigned char volatile xdata *)0xfb14) |
|||
#define COM5_DA_L (*(unsigned char volatile xdata *)0xfb15) |
|||
#define COM6_DA_L (*(unsigned char volatile xdata *)0xfb16) |
|||
#define COM7_DA_L (*(unsigned char volatile xdata *)0xfb17) |
|||
#define COM0_DA_H (*(unsigned char volatile xdata *)0xfb18) |
|||
#define COM1_DA_H (*(unsigned char volatile xdata *)0xfb19) |
|||
#define COM2_DA_H (*(unsigned char volatile xdata *)0xfb1a) |
|||
#define COM3_DA_H (*(unsigned char volatile xdata *)0xfb1b) |
|||
#define COM4_DA_H (*(unsigned char volatile xdata *)0xfb1c) |
|||
#define COM5_DA_H (*(unsigned char volatile xdata *)0xfb1d) |
|||
#define COM6_DA_H (*(unsigned char volatile xdata *)0xfb1e) |
|||
#define COM7_DA_H (*(unsigned char volatile xdata *)0xfb1f) |
|||
#define COM0_DC_L (*(unsigned char volatile xdata *)0xfb20) |
|||
#define COM1_DC_L (*(unsigned char volatile xdata *)0xfb21) |
|||
#define COM2_DC_L (*(unsigned char volatile xdata *)0xfb22) |
|||
#define COM3_DC_L (*(unsigned char volatile xdata *)0xfb23) |
|||
#define COM4_DC_L (*(unsigned char volatile xdata *)0xfb24) |
|||
#define COM5_DC_L (*(unsigned char volatile xdata *)0xfb25) |
|||
#define COM6_DC_L (*(unsigned char volatile xdata *)0xfb26) |
|||
#define COM7_DC_L (*(unsigned char volatile xdata *)0xfb27) |
|||
#define COM0_DC_H (*(unsigned char volatile xdata *)0xfb28) |
|||
#define COM1_DC_H (*(unsigned char volatile xdata *)0xfb29) |
|||
#define COM2_DC_H (*(unsigned char volatile xdata *)0xfb2a) |
|||
#define COM3_DC_H (*(unsigned char volatile xdata *)0xfb2b) |
|||
#define COM4_DC_H (*(unsigned char volatile xdata *)0xfb2c) |
|||
#define COM5_DC_H (*(unsigned char volatile xdata *)0xfb2d) |
|||
#define COM6_DC_H (*(unsigned char volatile xdata *)0xfb2e) |
|||
#define COM7_DC_H (*(unsigned char volatile xdata *)0xfb2f) |
|||
|
|||
#define TSCHEN1 (*(unsigned char volatile xdata *)0xfb40) |
|||
#define TSCHEN2 (*(unsigned char volatile xdata *)0xfb41) |
|||
#define TSCFG1 (*(unsigned char volatile xdata *)0xfb42) |
|||
#define TSCFG2 (*(unsigned char volatile xdata *)0xfb43) |
|||
#define TSWUTC (*(unsigned char volatile xdata *)0xfb44) |
|||
#define TSCTRL (*(unsigned char volatile xdata *)0xfb45) |
|||
#define TSSTA1 (*(unsigned char volatile xdata *)0xfb46) |
|||
#define TSSTA2 (*(unsigned char volatile xdata *)0xfb47) |
|||
#define TSRT (*(unsigned char volatile xdata *)0xfb48) |
|||
#define TSDAT (*(unsigned int volatile xdata *)0xfb49) |
|||
#define TSDATH (*(unsigned char volatile xdata *)0xfb49) |
|||
#define TSDATL (*(unsigned char volatile xdata *)0xfb4A) |
|||
#define TSTH00 (*(unsigned int volatile xdata *)0xfb50) |
|||
#define TSTH00H (*(unsigned char volatile xdata *)0xfb50) |
|||
#define TSTH00L (*(unsigned char volatile xdata *)0xfb51) |
|||
#define TSTH01 (*(unsigned int volatile xdata *)0xfb52) |
|||
#define TSTH01H (*(unsigned char volatile xdata *)0xfb52) |
|||
#define TSTH01L (*(unsigned char volatile xdata *)0xfb53) |
|||
#define TSTH02 (*(unsigned int volatile xdata *)0xfb54) |
|||
#define TSTH02H (*(unsigned char volatile xdata *)0xfb54) |
|||
#define TSTH02L (*(unsigned char volatile xdata *)0xfb55) |
|||
#define TSTH03 (*(unsigned int volatile xdata *)0xfb56) |
|||
#define TSTH03H (*(unsigned char volatile xdata *)0xfb56) |
|||
#define TSTH03L (*(unsigned char volatile xdata *)0xfb57) |
|||
#define TSTH04 (*(unsigned int volatile xdata *)0xfb58) |
|||
#define TSTH04H (*(unsigned char volatile xdata *)0xfb58) |
|||
#define TSTH04L (*(unsigned char volatile xdata *)0xfb59) |
|||
#define TSTH05 (*(unsigned int volatile xdata *)0xfb5a) |
|||
#define TSTH05H (*(unsigned char volatile xdata *)0xfb5a) |
|||
#define TSTH05L (*(unsigned char volatile xdata *)0xfb5b) |
|||
#define TSTH06 (*(unsigned int volatile xdata *)0xfb5c) |
|||
#define TSTH06H (*(unsigned char volatile xdata *)0xfb5c) |
|||
#define TSTH06L (*(unsigned char volatile xdata *)0xfb5d) |
|||
#define TSTH07 (*(unsigned int volatile xdata *)0xfb5e) |
|||
#define TSTH07H (*(unsigned char volatile xdata *)0xfb5e) |
|||
#define TSTH07L (*(unsigned char volatile xdata *)0xfb5f) |
|||
#define TSTH08 (*(unsigned int volatile xdata *)0xfb60) |
|||
#define TSTH08H (*(unsigned char volatile xdata *)0xfb60) |
|||
#define TSTH08L (*(unsigned char volatile xdata *)0xfb61) |
|||
#define TSTH09 (*(unsigned int volatile xdata *)0xfb62) |
|||
#define TSTH09H (*(unsigned char volatile xdata *)0xfb62) |
|||
#define TSTH09L (*(unsigned char volatile xdata *)0xfb63) |
|||
#define TSTH10 (*(unsigned int volatile xdata *)0xfb64) |
|||
#define TSTH10H (*(unsigned char volatile xdata *)0xfb64) |
|||
#define TSTH10L (*(unsigned char volatile xdata *)0xfb65) |
|||
#define TSTH11 (*(unsigned int volatile xdata *)0xfb66) |
|||
#define TSTH11H (*(unsigned char volatile xdata *)0xfb66) |
|||
#define TSTH11L (*(unsigned char volatile xdata *)0xfb67) |
|||
#define TSTH12 (*(unsigned int volatile xdata *)0xfb68) |
|||
#define TSTH12H (*(unsigned char volatile xdata *)0xfb68) |
|||
#define TSTH12L (*(unsigned char volatile xdata *)0xfb69) |
|||
#define TSTH13 (*(unsigned int volatile xdata *)0xfb6a) |
|||
#define TSTH13H (*(unsigned char volatile xdata *)0xfb6a) |
|||
#define TSTH13L (*(unsigned char volatile xdata *)0xfb6b) |
|||
#define TSTH14 (*(unsigned int volatile xdata *)0xfb6c) |
|||
#define TSTH14H (*(unsigned char volatile xdata *)0xfb6c) |
|||
#define TSTH14L (*(unsigned char volatile xdata *)0xfb6d) |
|||
#define TSTH15 (*(unsigned int volatile xdata *)0xfb6e) |
|||
#define TSTH15H (*(unsigned char volatile xdata *)0xfb6e) |
|||
#define TSTH15L (*(unsigned char volatile xdata *)0xfb6f) |
|||
|
|||
/////////////////////////////////////////////////
|
|||
//FA00H-FAFFH
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
|
|||
/////////////////////////////////////////////////
|
|||
|
|||
#endif |
|||
|
|||
@ -0,0 +1,240 @@ |
|||
|
|||
#include "uartx.h" |
|||
|
|||
TS_uart_reg ts_uart[SERIAL_MAX_NUM] = {0}; |
|||
TS_send_buf ts_send_buf; |
|||
TS_recv_buf ts_recv_buf; |
|||
|
|||
void L0_uartN_set(U8 uartx, U8 x) /*reentrant*/ |
|||
{ |
|||
switch (uartx) |
|||
{ |
|||
case 0: |
|||
SBUF = (x); |
|||
break; |
|||
case 1: |
|||
S2BUF = (x); |
|||
break; |
|||
case 2: |
|||
S3BUF = (x); |
|||
break; |
|||
case 3: |
|||
S4BUF = (x); |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
} |
|||
|
|||
U8 L0_uartN_get(U8 uartx) |
|||
{ |
|||
U8 x = 0; |
|||
switch (uartx) |
|||
{ |
|||
case 0: |
|||
x = SBUF; |
|||
break; |
|||
case 1: |
|||
x = S2BUF; |
|||
break; |
|||
case 2: |
|||
x = S3BUF; |
|||
break; |
|||
case 3: |
|||
x = S4BUF; |
|||
break; |
|||
default: |
|||
break; |
|||
} |
|||
return x; |
|||
} |
|||
|
|||
void L0_uartN_485(U8 uartx) |
|||
{ |
|||
switch(uartx) |
|||
{ |
|||
case 0: D_UART0_485_TX(); break; |
|||
case 1: D_UART2_485_TX(); break; |
|||
case 2: D_UART3_485_TX(); break; |
|||
case 3: D_UART4_485_TX(); break; |
|||
default: break; |
|||
} |
|||
} |
|||
|
|||
void L0_waitFree_uartN(U8 uartx) |
|||
{ |
|||
ts_uart[uartx].s.over = 0; |
|||
while (ts_uart[uartx].s.ok != D_ready) |
|||
{ |
|||
#if 1 //发送数据特别快时,某些情况下会导致数据发送出错
|
|||
ts_uart[uartx].s.over++; |
|||
if (ts_uart[uartx].s.over > 20000) |
|||
{ |
|||
ts_uart[uartx].s.max = 0; |
|||
ts_uart[uartx].s.now = 0; |
|||
ts_uart[uartx].s.ok = D_ready; |
|||
break; |
|||
} |
|||
#endif |
|||
} |
|||
} |
|||
|
|||
void L0_uartN_sendArray(U8 uartx, void *buf, U16 len) |
|||
{ |
|||
U16 i; |
|||
if (len == 0) |
|||
{ |
|||
return; |
|||
} |
|||
L0_waitFree_uartN(uartx); |
|||
|
|||
L0_uartN_485(uartx); |
|||
ts_uart[uartx].s.ok = D_clear; |
|||
ts_uart[uartx].s.over = 0; |
|||
ts_uart[uartx].s.max = len; |
|||
ts_uart[uartx].s.now = 1; |
|||
if (len <= ts_uart[uartx].s.bufmax) |
|||
{ |
|||
//将参数buf拷贝至内部buf
|
|||
for (i = 0; i < len; i++) |
|||
{ |
|||
ts_uart[uartx].s.buf[i] = ((U8 *)buf)[i]; |
|||
} |
|||
ts_uart[uartx].s.p = ts_uart[uartx].s.buf; |
|||
} |
|||
else |
|||
{ |
|||
//不使用内部buf,如果再发送完毕之前,参数buf被回收,发送会出错
|
|||
ts_uart[uartx].s.p = (U8 *)buf; |
|||
} |
|||
L0_uartN_set(uartx, ts_uart[uartx].s.p[0]); |
|||
} |
|||
|
|||
void L0_uartN_uc(U8 uartx, U8 ww) |
|||
{ |
|||
L0_uartN_sendArray(uartx, &ww, 1); |
|||
} |
|||
|
|||
void L0_uartN_us(U8 uartx, vU16 ww) |
|||
{ |
|||
U_U16 uStemp; |
|||
uStemp.word = ww; |
|||
ts_uart[uartx].s.buf3[0] = uStemp.BYTE2.h; |
|||
ts_uart[uartx].s.buf3[1] = uStemp.BYTE2.l; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 2); |
|||
} |
|||
|
|||
void L0_uartN_ul(U8 uartx, vU32 ww) |
|||
{ |
|||
U_U32 uStemp; |
|||
L0_waitFree_uartN(uartx); |
|||
uStemp.dWord = ww; |
|||
ts_uart[uartx].s.buf3[0] = uStemp.BYTE4.byte0; |
|||
ts_uart[uartx].s.buf3[1] = uStemp.BYTE4.byte1; |
|||
ts_uart[uartx].s.buf3[2] = uStemp.BYTE4.byte2; |
|||
ts_uart[uartx].s.buf3[3] = uStemp.BYTE4.byte3; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 4); |
|||
} |
|||
|
|||
void L0_uartN_0d0a(U8 uartx) |
|||
{ |
|||
L0_waitFree_uartN(uartx); |
|||
ts_uart[uartx].s.buf3[0] = 0x0d; |
|||
ts_uart[uartx].s.buf3[1] = 0x0a; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 2); |
|||
} |
|||
|
|||
void L0_uartN_uchex(U8 uartx, U8 ww) |
|||
{ |
|||
L0_waitFree_uartN(uartx); |
|||
ts_uart[uartx].s.buf3[0] = cguHex2Char[D_uc_high(ww)][1]; |
|||
ts_uart[uartx].s.buf3[1] = cguHex2Char[D_uc_low(ww)][1]; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 2); |
|||
} |
|||
|
|||
void L0_uartN_ushex(U8 uartx, vU16 ww) |
|||
{ |
|||
U_F16 k; |
|||
L0_waitFree_uartN(uartx); |
|||
k.us = ww; |
|||
ts_uart[uartx].s.buf3[0] = cguHex2Char[D_uc_high(k.BYTE2.H)][1]; |
|||
ts_uart[uartx].s.buf3[1] = cguHex2Char[D_uc_low(k.BYTE2.H)][1]; |
|||
ts_uart[uartx].s.buf3[2] = cguHex2Char[D_uc_high(k.BYTE2.L)][1]; |
|||
ts_uart[uartx].s.buf3[3] = cguHex2Char[D_uc_low(k.BYTE2.L)][1]; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 4); |
|||
} |
|||
|
|||
void L0_uartN_ulhex(U8 uartx, U32 ww) |
|||
{ |
|||
U_U32 k; |
|||
L0_waitFree_uartN(uartx); |
|||
k.dWord = ww; |
|||
ts_uart[uartx].s.buf3[0] = cguHex2Char[D_uc_high(k.BYTE4.byte0)][1]; |
|||
ts_uart[uartx].s.buf3[1] = cguHex2Char[D_uc_low(k.BYTE4.byte0)][1]; |
|||
ts_uart[uartx].s.buf3[2] = cguHex2Char[D_uc_high(k.BYTE4.byte1)][1]; |
|||
ts_uart[uartx].s.buf3[3] = cguHex2Char[D_uc_low(k.BYTE4.byte1)][1]; |
|||
ts_uart[uartx].s.buf3[4] = cguHex2Char[D_uc_high(k.BYTE4.byte2)][1]; |
|||
ts_uart[uartx].s.buf3[5] = cguHex2Char[D_uc_low(k.BYTE4.byte2)][1]; |
|||
ts_uart[uartx].s.buf3[6] = cguHex2Char[D_uc_high(k.BYTE4.byte3)][1]; |
|||
ts_uart[uartx].s.buf3[7] = cguHex2Char[D_uc_low(k.BYTE4.byte3)][1]; |
|||
L0_uartN_sendArray(uartx, ts_uart[uartx].s.buf3, 8); |
|||
} |
|||
|
|||
void L0_uartN_sendstr(U8 uartx, U8 *str) |
|||
{ |
|||
L0_uartN_sendArray(uartx, str, Lc_strlen(str)); |
|||
} |
|||
|
|||
void L0_uartN_sendArrayHex(U8 uartx, vU8 *buf, U16 n) |
|||
{ |
|||
U16 i; |
|||
for (i = 0; i < n; i++) |
|||
{ |
|||
L0_uartN_uchex(uartx, buf[i]); |
|||
L0_uartN_uc(uartx, ' '); |
|||
} |
|||
} |
|||
|
|||
void L0_uartN_s2b(U8 uartx) |
|||
{ |
|||
if(ts_uart[uartx].r.head == 0) |
|||
{ |
|||
ts_uart[uartx].r.head = 1; |
|||
ts_uart[uartx].r.ok = 0; |
|||
ts_uart[uartx].r.num = 0; |
|||
} |
|||
else |
|||
{ |
|||
if(ts_uart[uartx].r.num >= ts_uart[uartx].r.bufmax) |
|||
{ |
|||
ts_uart[uartx].r.num = 0; |
|||
} |
|||
} |
|||
ts_uart[uartx].r.buf[ ts_uart[uartx].r.num ] = ts_uart[uartx].r.reg; |
|||
ts_uart[uartx].r.num++; |
|||
ts_uart[uartx].r.idle = 0; |
|||
ts_uart[uartx].r.overtime_t = 0; |
|||
} |
|||
|
|||
void L0_uartN_overtime_callback(U8 uartx) |
|||
{ |
|||
if(0 == ts_uart[uartx].r.idle) |
|||
{ |
|||
if(ts_uart[uartx].r.overtime_t >= 2) |
|||
{ |
|||
//设置总线空闲
|
|||
ts_uart[uartx].r.idle = 1; |
|||
ts_uart[uartx].r.head = 0; |
|||
ts_uart[uartx].r.overtime_t = 0; |
|||
|
|||
//数据不为空
|
|||
if(ts_uart[uartx].r.num > 0) |
|||
{ |
|||
/// 接收到的数据结束: 总线空闲+buf非空
|
|||
// ts_uart[uartx].r.num = 0;
|
|||
ts_uart[uartx].r.ok = 1; |
|||
} |
|||
} |
|||
ts_uart[uartx].r.overtime_t ++; |
|||
} |
|||
} |
|||
@ -0,0 +1,97 @@ |
|||
|
|||
#ifndef _uartN_H |
|||
#define _uartN_H |
|||
#include "../clib/clib.h" |
|||
#include "../tpc/tpc_x.h" |
|||
#include "../bsp/bsp_config.h" |
|||
|
|||
#define SERIAL_MAX_NUM 4 |
|||
#define D_UART_send_buf2_max 8 //此处改动会影响L0_uartN_ulhex函数
|
|||
|
|||
#define D_uartN_free() (0 == ts_uart_send_buf[uartx].max) |
|||
#define D_uartN_busy() (0 != ts_uart_send_buf[uartx].max) |
|||
#define D_BRT_COUNT(t,clk,uartBRT) (U16)(65536- (clk / (4 * uartBRT * t))) |
|||
|
|||
/////可以依据实际使用独立定制
|
|||
#define D_send1_max 64 |
|||
#define D_send2_max 64 |
|||
#define D_send3_max 64 |
|||
#define D_send4_max 64 |
|||
|
|||
/////可以依据实际使用独立定制
|
|||
#define D_recv1_max 64 |
|||
#define D_recv2_max 64 |
|||
#define D_recv3_max 64 |
|||
#define D_recv4_max 64 |
|||
|
|||
typedef struct |
|||
{ |
|||
U8 r1[D_recv1_max]; |
|||
U8 r2[D_recv2_max]; |
|||
U8 r3[D_recv3_max]; |
|||
U8 r4[D_recv4_max]; |
|||
}TS_recv_buf; |
|||
|
|||
typedef struct |
|||
{ |
|||
U8 s1[D_send1_max]; |
|||
U8 s2[D_send2_max]; |
|||
U8 s3[D_send3_max]; |
|||
U8 s4[D_send4_max]; |
|||
}TS_send_buf; |
|||
|
|||
typedef struct _TS_uart_reg |
|||
{ |
|||
struct |
|||
{ |
|||
vU8 num; //接收到的数目注意数据长度的范围
|
|||
vU8 *p; |
|||
vU16 now; /// 当前buf所在的位置 0------(max-1)
|
|||
vU16 max; /// 当前buf中数据长度,也就是需要发送的长度
|
|||
vU32 over; /// 结束等待标志,over累加到某个值时,结束等待
|
|||
vU8 ok; /// 发送完成标志
|
|||
vU8 *buf; |
|||
vU8 buf3[D_UART_send_buf2_max]; |
|||
U16 bufmax; ///buf的最大长度
|
|||
}s; |
|||
|
|||
struct |
|||
{ |
|||
vU8 reg; |
|||
vU8 ok; //接收协议ok标志,串口初始化设置为0
|
|||
vU8 idle; //空闲标志
|
|||
vU8 overtime_t; //超时溢出的计数器
|
|||
vU8 head; //接收标志头标志,串口初始化设置0
|
|||
vU8 num; //协议实际长度
|
|||
vU8 *buf; ////协议缓冲,由每个串口根据需要的缓冲区大小自己定义
|
|||
U16 bufmax; ///buf的最大长度
|
|||
}r; |
|||
|
|||
void (*tp_handler)(U8 uartx); |
|||
U8 uartx; |
|||
|
|||
}TS_uart_reg; |
|||
|
|||
extern TS_uart_reg ts_uart[SERIAL_MAX_NUM]; |
|||
extern TS_send_buf ts_send_buf; |
|||
extern TS_recv_buf ts_recv_buf; |
|||
|
|||
extern void L0_uartN_init(U8 uartx); |
|||
extern void L0_uartN_set(U8 uartx,U8 x); |
|||
extern U8 L0_uartN_get(U8 uartx); |
|||
extern void L0_uartN_sendArray(U8 uartx,void *buf,U16 len); |
|||
extern void L0_uartN_uc(U8 uartx,U8 ww); |
|||
extern void L0_uartN_us(U8 uartx,vU16 ww); |
|||
extern void L0_uartN_ul(U8 uartx,vU32 ww); |
|||
extern void L0_uartN_0d0a(U8 uartx); |
|||
extern void L0_uartN_uchex(U8 uartx, U8 ww); |
|||
extern void L0_uartN_ushex(U8 uartx, U16 ww); |
|||
extern void L0_uartN_ulhex(U8 uartx, U32 ww); |
|||
extern void L0_uartN_sendstr(U8 uartx,U8 *buf); |
|||
extern void L0_uartN_sendArrayHex(U8 uartx,vU8 *buf,U16 n); |
|||
extern void L0_uartN_s2b(U8 uartx); |
|||
extern void L0_uartN_overtime_callback(U8 uartx); |
|||
|
|||
|
|||
#endif //#ifndef _uartN_H
|
|||
|
|||
@ -1,211 +0,0 @@ |
|||
//////////////////////////////////////////////////////////////////////////
|
|||
/// COPYRIGHT NOTICE
|
|||
/// Copyright (c) 2015, 传控科技
|
|||
/// All rights reserved.
|
|||
///
|
|||
/// @file main.c
|
|||
/// @brief main app
|
|||
///
|
|||
///(本文件实现的功能的详述)
|
|||
///
|
|||
/// @version 1.1 CCsens technology
|
|||
/// @author CC
|
|||
/// @date 20150102
|
|||
///
|
|||
///
|
|||
/// 修订说明:最初版本
|
|||
/// Modified by:
|
|||
/// Modified date:
|
|||
/// Version:
|
|||
/// Descriptions:
|
|||
// 20160413 CC-ACC-VH02
|
|||
// 连接至 J22 RXD0 TXD0
|
|||
//P5_DIR &= ~BITN1; //p5.1输出TXD
|
|||
//P5_DIR |= BITN0; //p5.0输入RXD
|
|||
//P5_SEL0 &= ~(BITN0 +BITN1); //设置P5.0 P5.1为UART0 RXD TXD
|
|||
//P5_SEL1 |= BITN0 +BITN1;
|
|||
|
|||
/*****************************************************************************
|
|||
update by cc @201700110 |
|||
针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 |
|||
个需要平衡的事情. |
|||
|
|||
clib/clib.c: |
|||
公用的函数 和硬件无关 |
|||
放置串行模式(串口等其他通讯总线类的输出)输出的函数, |
|||
一些覆盖模式输出的(lcd等固屏输出的)的也可使用 |
|||
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/Uprotocol2app |
|||
协议到应用 |
|||
为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 |
|||
|
|||
typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ |
|||
L3_UARTcom0_exp_protocol 解析应用协议 |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式 |
|||
公用的串口通讯定义 |
|||
struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_ |
|||
void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中 |
|||
-------------------------------------------------------------------------------------------- |
|||
msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 |
|||
L0_UART0_Init |
|||
UART0_IRQHandler |
|||
L0_Usend_uc------UserDef |
|||
----------------------------------------------------------------------------------------- |
|||
********************************************************************************/ |
|||
#include "uart_x.h" |
|||
|
|||
TS_uart_reg idata ts_uart[SERIAL_MAX_NUM] = {0}; |
|||
|
|||
void L0_uartN_set(U8 uartx,U8 x) /*reentrant*/ |
|||
{ |
|||
switch(uartx) |
|||
{ |
|||
case 0:SBUF = (x);break; |
|||
case 1:S2BUF = (x);break; |
|||
case 2:S3BUF = (x);break; |
|||
case 3:S4BUF = (x);break; |
|||
default:break; |
|||
} |
|||
} |
|||
|
|||
U8 L0_uartN_get(U8 uartx) |
|||
{ |
|||
U8 x = 0; |
|||
switch(uartx) |
|||
{ |
|||
case 0:x = SBUF; break; |
|||
case 1:x = S2BUF;break; |
|||
case 2:x = S3BUF;break; |
|||
case 3:x = S4BUF;break; |
|||
default:break; |
|||
} |
|||
return x; |
|||
} |
|||
|
|||
void L0_waitFree_uartN(U8 uartx) |
|||
{ |
|||
ts_uart[uartx].p->over = 0; |
|||
while(ts_uart[uartx].p->ok != D_ready) |
|||
{ |
|||
#if 0 //发送数据特别快时,某些情况下会导致数据发送出错
|
|||
if(ts_uart[uartx].p->over ++ > 600000) |
|||
{ |
|||
break; |
|||
} |
|||
#endif |
|||
} |
|||
} |
|||
|
|||
void L0_uartN_sendArray(U8 uartx,void *buf,U16 len) |
|||
{ |
|||
L0_waitFree_uartN(uartx); |
|||
ts_uart[uartx].p->ok = D_clear; |
|||
ts_uart[uartx].p->over = 0; |
|||
ts_uart[uartx].p->max = len; |
|||
ts_uart[uartx].p->now = 1; |
|||
if(len <= D_UART_send_buf_max) |
|||
{ |
|||
//将参数buf拷贝至内部buf
|
|||
for(ts_uart[uartx].p->num = 0;ts_uart[uartx].p->num < len;ts_uart[uartx].p->num ++) |
|||
{ |
|||
ts_uart[uartx].p->buf[ts_uart[uartx].p->num] = ((U8*)buf)[ts_uart[uartx].p->num]; |
|||
} |
|||
ts_uart[uartx].p->p = ts_uart[uartx].p->buf; |
|||
} |
|||
else |
|||
{ |
|||
//不使用内部buf,如果再发送完毕之前,参数buf被回收,发送会出错
|
|||
ts_uart[uartx].p->p = (U8 *)buf; |
|||
} |
|||
L0_uartN_set(uartx,ts_uart[uartx].p->p[0]); |
|||
} |
|||
|
|||
void L0_uartN_uc(U8 uartx,U8 ww) |
|||
{ |
|||
L0_uartN_sendArray(uartx,&ww,1); |
|||
} |
|||
|
|||
void L0_uartN_us(U8 uartx,vU16 ww) |
|||
{ |
|||
U_U16 uStemp; |
|||
uStemp.word = ww; |
|||
ts_uart[uartx].p->buf3[0] = uStemp.BYTE2.h; |
|||
ts_uart[uartx].p->buf3[1] = uStemp.BYTE2.l; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2); |
|||
} |
|||
|
|||
void L0_uartN_ul(U8 uartx,vU32 ww) |
|||
{ |
|||
U_U32 uStemp; |
|||
L0_waitFree_uartN(uartx); |
|||
uStemp.dWord = ww; |
|||
ts_uart[uartx].p->buf3[0] = uStemp.BYTE4.byte0; |
|||
ts_uart[uartx].p->buf3[1] = uStemp.BYTE4.byte1; |
|||
ts_uart[uartx].p->buf3[2] = uStemp.BYTE4.byte2; |
|||
ts_uart[uartx].p->buf3[3] = uStemp.BYTE4.byte3; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,4); |
|||
} |
|||
|
|||
void L0_uartN_0d0a(U8 uartx) |
|||
{ |
|||
L0_waitFree_uartN(uartx); |
|||
ts_uart[uartx].p->buf3[0] = 0x0d; |
|||
ts_uart[uartx].p->buf3[1] = 0x0a; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2); |
|||
} |
|||
|
|||
void L0_uartN_uchex(U8 uartx,U8 ww) |
|||
{ |
|||
L0_waitFree_uartN(uartx); |
|||
ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(ww)][1]; |
|||
ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (ww)][1]; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,2); |
|||
} |
|||
|
|||
void L0_uartN_ushex(U8 uartx,vU16 ww) |
|||
{ |
|||
U_F16 k; |
|||
L0_waitFree_uartN(uartx); |
|||
k.us = ww; |
|||
ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(k.BYTE2.H)][1]; |
|||
ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (k.BYTE2.H)][1]; |
|||
ts_uart[uartx].p->buf3[2] = cguHex2Char[D_uc_high(k.BYTE2.L)][1]; |
|||
ts_uart[uartx].p->buf3[3] = cguHex2Char[D_uc_low (k.BYTE2.L)][1]; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,4); |
|||
} |
|||
|
|||
void L0_uartN_ulhex(U8 uartx,U32 ww) |
|||
{ |
|||
U_U32 k; |
|||
L0_waitFree_uartN(uartx); |
|||
k.dWord = ww; |
|||
ts_uart[uartx].p->buf3[0] = cguHex2Char[D_uc_high(k.BYTE4.byte0)][1]; |
|||
ts_uart[uartx].p->buf3[1] = cguHex2Char[D_uc_low (k.BYTE4.byte0)][1]; |
|||
ts_uart[uartx].p->buf3[2] = cguHex2Char[D_uc_high(k.BYTE4.byte1)][1]; |
|||
ts_uart[uartx].p->buf3[3] = cguHex2Char[D_uc_low (k.BYTE4.byte1)][1]; |
|||
ts_uart[uartx].p->buf3[4] = cguHex2Char[D_uc_high(k.BYTE4.byte2)][1]; |
|||
ts_uart[uartx].p->buf3[5] = cguHex2Char[D_uc_low (k.BYTE4.byte2)][1]; |
|||
ts_uart[uartx].p->buf3[6] = cguHex2Char[D_uc_high(k.BYTE4.byte3)][1]; |
|||
ts_uart[uartx].p->buf3[7] = cguHex2Char[D_uc_low (k.BYTE4.byte3)][1]; |
|||
L0_uartN_sendArray(uartx,ts_uart[uartx].p->buf3,8); |
|||
} |
|||
|
|||
void L0_uartN_sendstr(U8 uartx,U8 *str) |
|||
{ |
|||
L0_uartN_sendArray(uartx,str,Lc_strlen(str)); |
|||
} |
|||
|
|||
void L0_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n) |
|||
{ |
|||
int i; |
|||
for(i=0;i<n;i++) |
|||
{ |
|||
L0_uartN_uchex(uartx,buf[i]); |
|||
L0_uartN_uc(uartx,' '); |
|||
} |
|||
L0_uartN_0d0a(uartx); |
|||
} |
|||
|
|||
|
|||
@ -1,105 +0,0 @@ |
|||
//////////////////////////////////////////////////////////////////////////
|
|||
/// COPYRIGHT NOTICE
|
|||
/// Copyright (c) 2015, 传控科技
|
|||
/// All rights reserved.
|
|||
///
|
|||
/// @file main.c
|
|||
/// @brief main app
|
|||
///
|
|||
///(本文件实现的功能的详述)
|
|||
///
|
|||
/// @version 1.1 CCsens technology
|
|||
/// @author CC
|
|||
/// @date 20150102
|
|||
///
|
|||
///
|
|||
/// 修订说明:最初版本
|
|||
/// Modified by:
|
|||
/// Modified date:
|
|||
/// Version:
|
|||
/// Descriptions:
|
|||
//////////////////////////////////////////////////////////////////////////
|
|||
/*****************************************************************************
|
|||
update by cc @201700110 |
|||
针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 |
|||
个需要平衡的事情. |
|||
|
|||
clib/clib.c: |
|||
公用的函数 和硬件无关 |
|||
放置串行模式(串口等其他通讯总线类的输出)输出的函数, |
|||
一些覆盖模式输出的(lcd等固屏输出的)的也可使用 |
|||
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/Uprotocol2app |
|||
协议到应用 |
|||
为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 |
|||
|
|||
typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ |
|||
L3_UARTcom0_exp_protocol 解析应用协议 |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/urec2protocol: 接收到的数据放入到指向特定协议的缓存中,和协议的格式有关 一般分为 标头式或者标尾式 |
|||
公用的串口通讯定义 |
|||
struct _s_uart_rec_ 的公共协议包(关键的结构体)的声明------struct _s_uart_rec_ |
|||
void L1_uart_2buf(struct _s_uart_rec_ *p)串行数据保存到指向特定协议的缓冲中 |
|||
-------------------------------------------------------------------------------------------- |
|||
msp/uartx.c 底层代码 和cpu相关 缓存发送也放在里面 |
|||
L0_UART0_Init |
|||
UART0_IRQHandler |
|||
L0_Usend_uc------UserDef |
|||
----------------------------------------------------------------------------------------- |
|||
********************************************************************************/ |
|||
|
|||
|
|||
#ifndef _uartN_H |
|||
#define _uartN_H |
|||
#include "../clib/clib.h" |
|||
#include "../tpc/tpc_x.h" |
|||
#include "../bsp/bsp_config.h" |
|||
|
|||
#define D_uartN_free() (0 == ts_uart_send_shop[uartx].max) |
|||
#define D_uartN_busy() (0 != ts_uart_send_shop[uartx].max) |
|||
#define D_BRT_COUNT(t,clk,uartBRT) (U16)(65536- (clk / (4 * uartBRT * t))) |
|||
|
|||
|
|||
typedef struct _ts_uart0_send_buf_ |
|||
{ |
|||
vU8 num; //接收到的数目注意数据长度的范围
|
|||
vU8 *p; |
|||
vU16 now; /// 当前buf所在的位置 0------(max-1)
|
|||
vU16 max; /// 当前buf的最大值,也就是需要发送的长度
|
|||
vU32 over; /// 结束等待标志,over累加到某个值时,结束等待
|
|||
vU8 ok; /// 发送完成标志
|
|||
vU8 buf[D_UART_send_buf_max + 1]; |
|||
/// U8 buf2[D_send_buf2_max];
|
|||
vU8 buf3[D_UART_send_buf2_max]; |
|||
//// U8 buf4[D_send_buf_max];
|
|||
/// U8 buf[D_send_buf_max + 1];//buffer 的第一位是 长度
|
|||
}Ts_uart_send_buf; |
|||
|
|||
typedef struct _TS_uart_reg |
|||
{ |
|||
Ts_uart_send_buf idata *p; |
|||
TP_Handler_X *t; |
|||
void (*tp_handler)(TP_Handler_X *); |
|||
U8 *ack; //ack
|
|||
}TS_uart_reg; |
|||
|
|||
extern TS_uart_reg idata ts_uart[SERIAL_MAX_NUM]; |
|||
|
|||
extern void L0_uartN_init(U8 uartx); |
|||
extern void L0_uartN_set(U8 uartx,U8 x); |
|||
extern U8 L0_uartN_get(U8 uartx); |
|||
extern void L0_uartN_sendArray(U8 uartx,void *buf,U16 len); |
|||
extern void L0_uartN_uc(U8 uartx,U8 ww); |
|||
extern void L0_uartN_us(U8 uartx,vU16 ww); |
|||
extern void L0_uartN_ul(U8 uartx,vU32 ww); |
|||
extern void L0_uartN_0d0a(U8 uartx); |
|||
extern void L0_uartN_uchex(U8 uartx, U8 ww); |
|||
extern void L0_uartN_ushex(U8 uartx, U16 ww); |
|||
extern void L0_uartN_ulhex(U8 uartx, U32 ww); |
|||
extern void L0_uartN_sendstr(U8 uartx,U8 *buf); |
|||
extern void L1_uartN_uchexArray(U8 uartx,vU8 *buf,U16 n); |
|||
|
|||
|
|||
#endif //#ifndef _uartN_H
|
|||
|
|||
@ -1,88 +1,301 @@ |
|||
|
|||
/*****************************************************************************
|
|||
update by cc @201501101001 |
|||
针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 |
|||
个需要平衡的事情. |
|||
|
|||
uartcom/uartlib.c: |
|||
公用的函数 和硬件无关 |
|||
放置串行模式(串口等其他通讯总线类的输出)输出的函数, |
|||
一些覆盖模式输出的(lcd等固屏输出的)的也可使用 |
|||
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/uartcom0 |
|||
和uart相关的通讯协议 com + n |
|||
为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 |
|||
|
|||
typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ |
|||
L3_UARTcom0_exp_protocol 解析应用协议 |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/uprotocol: 主要是为 uartcom + n服务的 驱动层到应用层缓存的过度 |
|||
公用的串口通讯定义 |
|||
struct _s_protocol_ 的公共协议包(关键的结构体)的声明------struct _s_protocol_ |
|||
void L1_uart_2buf(struct _s_protocol_ *p)串行数据保存到缓冲中 |
|||
-------------------------------------------------------------------------------------------- |
|||
msp/uartx.c 底层代码 和cpu相关 |
|||
L0_UART0_Init |
|||
UART0_IRQHandler |
|||
L0_Usend_uc----------s_at0 |
|||
----------------------------------------------------------------------------------------- |
|||
********************************************************************************/ |
|||
// /*****************************************************************************
|
|||
// update by cc @201501101001
|
|||
// 针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是
|
|||
// 个需要平衡的事情.
|
|||
|
|||
// uartcom/uartlib.c:
|
|||
// 公用的函数 和硬件无关
|
|||
// 放置串行模式(串口等其他通讯总线类的输出)输出的函数,
|
|||
// 一些覆盖模式输出的(lcd等固屏输出的)的也可使用
|
|||
// void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...)
|
|||
// -----------------------------------------------------------------------------------------
|
|||
// uartcom/uartcom0
|
|||
// 和uart相关的通讯协议 com + n
|
|||
// 为了适应不同的通讯协议需要不同的uart口来对应 和应用相关
|
|||
|
|||
// typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------
|
|||
// L3_UARTcom0_exp_protocol 解析应用协议
|
|||
// -----------------------------------------------------------------------------------------
|
|||
// uartcom/uprotocol: 主要是为 uartcom + n服务的 驱动层到应用层缓存的过度
|
|||
// 公用的串口通讯定义
|
|||
// struct _s_protocol_ 的公共协议包(关键的结构体)的声明------struct _s_protocol_
|
|||
// void L1_uart_2buf(struct _s_protocol_ *p)串行数据保存到缓冲中
|
|||
// --------------------------------------------------------------------------------------------
|
|||
// msp/uartx.c 底层代码 和cpu相关
|
|||
// L0_UART0_Init
|
|||
// UART0_IRQHandler
|
|||
// L0_Usend_uc----------s_at0
|
|||
// -----------------------------------------------------------------------------------------
|
|||
// ********************************************************************************/
|
|||
|
|||
#include "debug.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
//NUM: 0 1 2 3 4
|
|||
// Fx R1 R2 R3 ocr
|
|||
// F+从机 R1 R2 R3 校验
|
|||
//相关功能移动到tpc_fx.c
|
|||
/// 实践中发现 如果收到多个以0d0a结束的短协议时,如果
|
|||
/// 协议之间间隔时间太短,ok处理不及时 会出现丢失协议的
|
|||
/// 的情况,所以 对于短暂的多个协议 应该有一定容量的缓冲
|
|||
/// 保留 ,同时 处理完协议后,应该清除接收缓冲,否则缓冲
|
|||
/// 会在自身满了后自动清除
|
|||
//_s_HRTU_P_rf_
|
|||
/// _s_HRTU_Pfx_
|
|||
/// fx 11 22 33 oc -- oc = 11+ 22+33
|
|||
//buf 0 1 2 3 [4]
|
|||
//fd 01 02 03 06 fd为头 010203为数据 06为数据校验和(01+02+03)
|
|||
|
|||
//对于连续的多条协议,如果前一条处理不及时,可能会被后一条覆盖
|
|||
void L1_s2b_PH1 (struct _tp_handler_x *p) //reentrant
|
|||
{ |
|||
if (0 == p->head) |
|||
{ |
|||
if (D_HETU_FX_fi == (p->reg & p->head_0)) |
|||
{ |
|||
p->head = 1; |
|||
p->num = 1; |
|||
p->buf[0] = p->reg; |
|||
//p->ok = 1;
|
|||
} |
|||
} |
|||
else |
|||
{ |
|||
p->buf[p->num++] = p->reg; |
|||
if(p->num >= D_HETU_FX_buf_max) // [D_HETU_FX_buf_max == 5]
|
|||
{ |
|||
p->ocr = p->buf[1]; |
|||
p->ocr += p->buf[2]; |
|||
p->ocr += p->buf[3]; |
|||
if(p->ocr == p->buf[D_HETU_FX_buf_max-1]) |
|||
{ |
|||
if (p->ok != 1) |
|||
{ |
|||
p->ok = 1;//收到 命令结束,必须有个地方清0,否则无法再次接受报文
|
|||
} |
|||
} |
|||
p->head = 0; //放在if (p->ok != 1) 外
|
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
/******************************************************************************
|
|||
** End Of File |
|||
******************************************************************************/ |
|||
// //NUM: 0 1 2 3 4
|
|||
// // Fx R1 R2 R3 ocr
|
|||
// // F+从机 R1 R2 R3 校验
|
|||
// //相关功能移动到tpc_fx.c
|
|||
// /// 实践中发现 如果收到多个以0d0a结束的短协议时,如果
|
|||
// /// 协议之间间隔时间太短,ok处理不及时 会出现丢失协议的
|
|||
// /// 的情况,所以 对于短暂的多个协议 应该有一定容量的缓冲
|
|||
// /// 保留 ,同时 处理完协议后,应该清除接收缓冲,否则缓冲
|
|||
// /// 会在自身满了后自动清除
|
|||
// //_s_HRTU_P_rf_
|
|||
// /// _s_HRTU_Pfx_
|
|||
// /// fx 11 22 33 oc -- oc = 11+ 22+33
|
|||
// //buf 0 1 2 3 [4]
|
|||
// //fd 01 02 03 06 fd为头 010203为数据 06为数据校验和(01+02+03)
|
|||
|
|||
// //对于连续的多条协议,如果前一条处理不及时,可能会被后一条覆盖
|
|||
|
|||
|
|||
// void L1_s2b_debug (Ts_uart_recv_buf *p) //reentrant
|
|||
// {
|
|||
// p->ok = 1;
|
|||
// return;
|
|||
// }
|
|||
|
|||
// //NFC协议:60 20 00 07 10 02 04 00 99 83 33 4E 36
|
|||
// //起始帧:60
|
|||
// //设备ID:20
|
|||
// //数据长度:00 07
|
|||
// //命令:10
|
|||
// //数据:02 04 00 99 83 33 4E
|
|||
// //校验:36 从起始帧到数据字段 [60 20 00 07 10 02 04 00 99 83 33 4E] 的所有字节的依次异或值
|
|||
// void L1_s2b_nfc (Ts_uart_recv_buf *p) //reentrant
|
|||
// {
|
|||
// if (0 == p->head)
|
|||
// {
|
|||
// if (p->head_0 == (p->reg & 0xFF))
|
|||
// {
|
|||
// p->head = 1;
|
|||
// p->buf[0] = p->reg;
|
|||
// p->index = 0;
|
|||
// p->num = p->maxnum;
|
|||
// p->ocr = p->reg;
|
|||
// }
|
|||
// }
|
|||
// else
|
|||
// {
|
|||
// p->buf[++p->index] = p->reg;
|
|||
// if(p->index == 3)
|
|||
// {
|
|||
// //5个字节协议头 + 1校验 + 数据(长度由2、3字节计算)
|
|||
// p->num = 5 + 1 + ((p->buf[2] << 8) | (p->buf[3]));
|
|||
// if(p->num > p->maxnum){
|
|||
// //error
|
|||
// p->head = 0;
|
|||
// p->ok = 0;
|
|||
// return;
|
|||
// }
|
|||
// }
|
|||
// if(p->index < p->num - 1)
|
|||
// {
|
|||
// //计算OCR
|
|||
// p->ocr ^= p->reg;
|
|||
// }
|
|||
// else
|
|||
// {
|
|||
// if(p->ocr == p->buf[p->num-1])
|
|||
// {
|
|||
// if (p->ok != 1)
|
|||
// {
|
|||
// //命令结束,必须有个地方清0,否则无法再次接受报文
|
|||
// p->ok = 1;
|
|||
// }
|
|||
// }
|
|||
// p->head = 0;
|
|||
// }
|
|||
// }
|
|||
// }
|
|||
|
|||
|
|||
// //RFID协议:BB 02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98 0C 7E
|
|||
// //帧头:BB
|
|||
// //Type:00命令帧 /01响应帧 /02通知帧
|
|||
// //Command: 07指令桢 /22单次读写 /27多次轮询 /28停止轮询 /0C选择 / B6设置功率
|
|||
// //数据长度:00 11
|
|||
// //数据:D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 [EB 98]
|
|||
// //校验:0C 从Type到数据字段 [02 22 00 11 D5 30 00 E2 00 10 71 00 00 52 9B 09 40 B4 02 EB 98] 的所有字节的累加和
|
|||
// //帧尾:7E
|
|||
// void L1_s2b_rfid (Ts_uart_recv_buf *p) //reentrant
|
|||
// {
|
|||
// LED0 ^= 1;
|
|||
|
|||
// if (0 == p->head)
|
|||
// {
|
|||
// if (p->head_0 == (p->reg & 0xFF))
|
|||
// {
|
|||
// p->head = 1;
|
|||
// p->buf[0] = p->reg;
|
|||
// p->index = 0;
|
|||
// p->num = p->maxnum;
|
|||
// //header字节不算累加和
|
|||
// p->ocr = 0;
|
|||
// }
|
|||
// }
|
|||
// else
|
|||
// {
|
|||
// p->buf[++p->index] = p->reg;
|
|||
// if(p->index == 4)
|
|||
// {
|
|||
// //5个字节协议头 + 1校验 + 1尾字节 + 数据(长度由2、3字节计算)
|
|||
// p->num = 5 + 1 + 1 + ((p->buf[3] << 8) | (p->buf[4]));
|
|||
// if(p->num > p->maxnum){
|
|||
// //error
|
|||
// p->head = 0;
|
|||
// p->ok = 0;
|
|||
// return;
|
|||
// }
|
|||
// }
|
|||
// if(p->index < p->num - 2)
|
|||
// {
|
|||
// //计算OCR
|
|||
// p->ocr += p->reg;
|
|||
// }
|
|||
// else if(p->index == p->num - 1)
|
|||
// {
|
|||
// if((p->buf[p->num - 1] == p->tail_0) && (p->ocr == p->buf[p->num-2]))
|
|||
// {
|
|||
// if (p->ok != 1)
|
|||
// {
|
|||
// //命令结束,必须有个地方清0,否则无法再次接受报文
|
|||
// p->ok = 1;
|
|||
// }
|
|||
// }
|
|||
// p->head = 0;
|
|||
// }
|
|||
// }
|
|||
// }
|
|||
|
|||
// //485协议:AA 55 00 04 01 10 00 00 15
|
|||
// //FILTER:固定2个字节 AA55
|
|||
// //SLAVEID:固定1个字节,代表从机ID
|
|||
// //CMDER: 固定1个字节,代表命令,每个从机自己定义。
|
|||
// //NUM: 固定2个字节,高字节在前,代表后续DATA的长度(不包括ocr),比如0x0010,代表后续 16个字节
|
|||
// //DATA:(Num 个字节)数据域
|
|||
// //OCR:1个字节,代表校验和, = 从SlaveId开始 - DATA结束的所有字节之和。
|
|||
|
|||
// void L1_s2b_rs485 (Ts_uart_recv_buf *p) //reentrant
|
|||
// {
|
|||
// // p->ok = 1;
|
|||
// // return;
|
|||
// if (0 == p->head)
|
|||
// {
|
|||
// if (p->head_0 == (p->reg & 0xFF))
|
|||
// {
|
|||
// p->head = 1;
|
|||
// p->buf[0] = p->reg;
|
|||
// p->index = 0;
|
|||
// p->num = p->maxnum;
|
|||
// //header字节不算累加和
|
|||
// p->ocr = 0;
|
|||
// }
|
|||
// }
|
|||
// else
|
|||
// {
|
|||
// p->buf[++p->index] = p->reg;
|
|||
// if(p->index == 4)
|
|||
// {
|
|||
// //1个字节协议头 + 1SlaveId + 1Cmder + 2字节数据长度 + 数据 + 1ocr
|
|||
// p->num = 5 + 1 + ((p->buf[3] << 8) | (p->buf[4]));
|
|||
// if(p->num > p->maxnum){
|
|||
// //error
|
|||
// p->head = 0;
|
|||
// p->ok = 0;
|
|||
// p->index = 0;
|
|||
// return;
|
|||
// }
|
|||
// }
|
|||
// if(p->index < p->num - 1)
|
|||
// {
|
|||
// //计算OCR
|
|||
// p->ocr += p->reg;
|
|||
// }
|
|||
// else if(p->index == p->num - 1)
|
|||
// {
|
|||
// if(p->ocr == p->buf[p->num-1])
|
|||
// {
|
|||
// if (p->ok != 1)
|
|||
// {
|
|||
// //命令结束,必须有个地方清0,否则无法再次接受报文
|
|||
// // LED0 ^= 1;
|
|||
// p->ok = 1;
|
|||
// }
|
|||
// }
|
|||
// p->head = 0;
|
|||
// }
|
|||
// }
|
|||
// }
|
|||
|
|||
|
|||
|
|||
// // void L1_s2b_rs485 (Ts_uart_recv_buf *p) //reentrant
|
|||
// // {
|
|||
// // // LED0 ^= 1;
|
|||
// // // p->ok = 1;
|
|||
// // // return;
|
|||
// // if (0 == p->head)
|
|||
// // {
|
|||
// // p->buf[p->index++] = p->reg;
|
|||
// // if(p->index == 2){
|
|||
// // if (p->head_0 == p->buf[0] && p->head_1 == p->buf[1])
|
|||
// // {
|
|||
// // p->head = 1;
|
|||
// // p->index = 1;
|
|||
// // p->num = p->maxnum;
|
|||
// // p->ocr = 0;
|
|||
// // }
|
|||
// // else
|
|||
// // {
|
|||
// // p->head = 0;
|
|||
// // p->ok = 0;
|
|||
// // p->index = 0;
|
|||
// // //往前移动一位
|
|||
// // p->buf[p->index++] = p->buf[1];
|
|||
// // }
|
|||
// // }
|
|||
// // }
|
|||
// // else
|
|||
// // {
|
|||
// // p->buf[++p->index] = p->reg;
|
|||
// // if(p->index == 5)
|
|||
// // {
|
|||
// // //2个字节协议头 + 1SlaveId + 1Cmder + 2字节数据长度 + 数据 + 1ocr
|
|||
// // p->num = 6 + 1 + ((p->buf[4] << 8) | (p->buf[5]));
|
|||
// // if(p->num > p->maxnum){
|
|||
// // //error
|
|||
// // p->head = 0;
|
|||
// // p->ok = 0;
|
|||
// // p->index = 0;
|
|||
// // return;
|
|||
// // }
|
|||
// // }
|
|||
// // if(p->index < p->num - 1)
|
|||
// // {
|
|||
// // //计算OCR
|
|||
// // p->ocr += p->reg;
|
|||
// // }
|
|||
// // else if(p->index == p->num - 1)
|
|||
// // {
|
|||
// // if(p->ocr == p->buf[p->num-1])
|
|||
// // {
|
|||
// // if (p->ok != 1)
|
|||
// // {
|
|||
// // //命令结束,必须有个地方清0,否则无法再次接受报文
|
|||
// // p->ok = 1;
|
|||
// // }
|
|||
// // }
|
|||
// // p->head = 0;
|
|||
// // p->index = 0;
|
|||
// // }
|
|||
// // }
|
|||
// // }
|
|||
|
|||
|
|||
|
|||
|
|||
// /******************************************************************************
|
|||
// ** End Of File
|
|||
// ******************************************************************************/
|
|||
|
|||
|
|||
@ -1,62 +0,0 @@ |
|||
|
|||
/*****************************************************************************
|
|||
update by cc @201501101001 |
|||
针对多串口 和 单一串口 有区别 每个串口是独立的还是分开的有讲究 程序是复杂的还是软件应用简单是 |
|||
个需要平衡的事情.d |
|||
|
|||
uartcom/uartlib.c: |
|||
公用的函数 和硬件无关 |
|||
放置串行模式(串口等其他通讯总线类的输出)输出的函数, |
|||
一些覆盖模式输出的(lcd等固屏输出的)的也可使用 |
|||
void Lc_print(void (*L0pf_send_uc)(char ww), char *dat,...) |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/uartcom0 |
|||
和uart相关的通讯协议 com + n |
|||
为了适应不同的通讯协议需要不同的uart口来对应 和应用相关 |
|||
|
|||
typedef struct _ts_lcm_pro_; 应用协议包的定义? LCM的协议------------ |
|||
L3_UARTcom0_exp_protocol 解析应用协议 |
|||
----------------------------------------------------------------------------------------- |
|||
uartcom/uprotocol: 主要是为 uartcom + n服务的 驱动层到应用层缓存的过度 |
|||
公用的串口通讯定义 |
|||
struct _s_protocol_ 的公共协议包(关键的结构体)的声明------struct _s_protocol_ |
|||
void L1_uart_2buf(struct _s_protocol_ *p)串行数据保存到缓冲中 |
|||
-------------------------------------------------------------------------------------------- |
|||
msp/uartx.c 底层代码 和cpu相关 |
|||
L0_UART0_Init |
|||
UART0_IRQHandler |
|||
L0_Usend_uc----------s_at0 |
|||
----------------------------------------------------------------------------------------- |
|||
********************************************************************************/ |
|||
|
|||
#include "modbus.h" |
|||
#include "../bsp/bsp_config.h" |
|||
#include "../ctask/tick.h" |
|||
#include "../clib/clib.h" |
|||
|
|||
//MODBUS协议解析函数
|
|||
//超出D_tp_handle_x_len,不继续保存数据
|
|||
void L1_s2b_PH4(struct _tp_handler_x *p) |
|||
{ |
|||
//p->modbusstmp = D_sys_now;
|
|||
if(p->head == 0) |
|||
{ |
|||
p->head = 1; |
|||
p->max = D_TPC_HANDLER_X_LEN; |
|||
p->sp = p->buf; |
|||
p->num = 0; |
|||
p->sp[p->num++] = p->reg; |
|||
} |
|||
else |
|||
{ |
|||
if(p->num < p->max) |
|||
{ |
|||
p->sp[p->num++] = p->reg; |
|||
} |
|||
} |
|||
} |
|||
|
|||
/******************************************************************************
|
|||
** End Of File |
|||
******************************************************************************/ |
|||
|
|||
@ -1,114 +0,0 @@ |
|||
//////////////////////////////////////////////////////////////////////////
|
|||
/// COPYRIGHT NOTICE
|
|||
/// Copyright (c) 2018, 传控科技
|
|||
/// All rights reserved.
|
|||
///
|
|||
/// @file tpc_fsk.c
|
|||
/// @brief transaction protocol control of fsk
|
|||
///
|
|||
///(本文件实现的功能的详述)
|
|||
///
|
|||
/// @version 1.1 CCsens technology
|
|||
/// @author CC
|
|||
/// @date 20150102
|
|||
///
|
|||
///
|
|||
/// @version 1.2 CCsens technology
|
|||
/// @author CC
|
|||
/// @date 20180308
|
|||
/// @info 整理
|
|||
|
|||
//
|
|||
//////////////////////////////////////////////////////////////////////////
|
|||
|
|||
|
|||
#ifndef __TPC_MODBUS_H_ |
|||
#define __TPC_MODBUS_H_ |
|||
|
|||
#include "tpc_x.h" |
|||
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
|
|||
|
|||
/**
|
|||
* 用户协议 |
|||
*/ |
|||
enum MODBUS_OPER |
|||
{ |
|||
MODBUS_OPER_READ = 0x03, |
|||
MODBUS_OPER_READCONFIG = 0x04, |
|||
MODBUS_OPER_WRITE = 0x06, |
|||
MODBUS_OPER_WRITE_M = 0x10, |
|||
MODBUS_OPER_ERR = 0x8F, |
|||
}; |
|||
|
|||
//协议类型: MODBUS RTU模式
|
|||
//#define D_s_PH4_modbus_max (128)
|
|||
//#define D_s_PH4_modbus_max (64)
|
|||
#define D_s_modbus_min 4 //modbus协议的最小长度
|
|||
|
|||
typedef struct ts_ph4_modbus |
|||
{ |
|||
U8 slaver; //从机地址
|
|||
U8 oper; //功能码
|
|||
U8 buf[D_TPC_HANDLER_X_LEN + 8]; |
|||
U8 crc[2]; |
|||
}TS_PH4_modbus; |
|||
|
|||
typedef struct s_modbus_03_ack |
|||
{ |
|||
U8 bytes; |
|||
U8 buf[D_TPC_HANDLER_X_LEN-1]; |
|||
}Modbus03Ack; |
|||
|
|||
typedef struct s_modbus_06_ack |
|||
{ |
|||
U16 reg; |
|||
U16 val; |
|||
}Modbus06Ack; |
|||
|
|||
typedef struct s_modbus_10_ack |
|||
{ |
|||
U16 reg; |
|||
U16 num; |
|||
}Modbus10Ack; |
|||
|
|||
typedef struct |
|||
{ |
|||
U16 slaver; |
|||
U16 oper; |
|||
U16 reg; |
|||
U16 regnum; |
|||
U16 bytes; |
|||
U8 *buf; |
|||
U16 mask; |
|||
}MD_SLAVER_INFO; |
|||
|
|||
#if 0 |
|||
typedef struct |
|||
{ |
|||
U8 reg; |
|||
U8 slaver; //对于主设备,slaver代表当前轮询的包的id,主设备每次轮询时,总是应该将slaver设置为轮询到的从设备id;对于从设备,slaver总是等于slaverId
|
|||
U8 max; //接收到的数目的最大值
|
|||
vU8 head; //接收标志头标志
|
|||
vU8 ok; //接收协议ok标志
|
|||
vU8 num; |
|||
vU8 *sp; |
|||
U8 buf[D_s_PH4_modbus_max + 8]; |
|||
vU8 crc[2]; |
|||
vU32 modbusstmp; |
|||
}TS_Handle_PH4; |
|||
#endif |
|||
extern U8 L3_pack_modbus(TS_PH4_modbus *pmodbus, MD_SLAVER_INFO *slaver_info); |
|||
//extern U8 L3_pack_modbusack(TS_PH4_modbus *pmodbus ,U8 slaver, U8 oper, U8 bufsize);
|
|||
extern U16 L3_modbus_slaver_ack(TS_PH4_modbus *pmodbus,TS_PH4_modbus *pModbusAck); |
|||
extern void L3_modbus_master_handler(TS_PH4_modbus *pmodbus,MD_SLAVER_INFO *p_slaver_info); |
|||
extern void L1_s2b_PH4(struct _tp_handler_x *p); |
|||
extern void L1_modbus_split(struct _tp_handler_x *p); |
|||
|
|||
|
|||
#endif /* end __TPC_UART_H_ */ |
|||
/*****************************************************************************
|
|||
** End Of File |
|||
******************************************************************************/ |
|||
|
|||
|
|||
|
|||
Loading…
Reference in new issue