//#include "reg51.h"
#include "stc15.h"
//#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define FOSC 11059200L //系统频率
#define BAUD 115200 //串口波特率
#define T1MS (65536-FOSC/1000) //1T
//#define T1MS (65536-FOSC/12/1000) //12T
#define NONE_PARITY 0 //无校验
#define ODD_PARITY 1 //奇校验
#define EVEN_PARITY 2 //偶校验
#define MARK_PARITY 3 //标记校验
#define SPACE_PARITY 4 //空白校验
//#define PARITYBIT EVEN_PARITY //定义校验位
#define PARITYBIT NONE_PARITY
unsigned char code CodeMT8870[16]={'D','1','2','3','4','5','6','7','8','9','0','*','#','A','B','C'};
#define S1_S0 0x40 //P_SW1.6
#define S1_S1 0x80 //P_SW1.7
bit busy;
BYTE read_number;
sbit TEST_LED = P1^5; //work LED, flash once per second ,F/R
sbit OUT_LED = P3^6;
sbit SHK = P3^2;
sbit STQ = P5^4;
//WORD i;
WORD count; //1000 times counter
WORD count2;
BYTE j;
void SendData(BYTE dat);
void SendString(char *s);
BYTE Read_MT8870(void);
void init_timer0(void);
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
//////////////////////////////////////// init the SLIC parameter
// i=0;
count = 0; //initial counter
count2 = 0;
j=0;
OUT_LED=1;
// STQ =0;
////////////////////////////////////////
ACC = P_SW1;
ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0
P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD)
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=1 S1_S1=0
// ACC |= S1_S0; //(P3.6/RxD_2, P3.7/TxD_2)
// P_SW1 = ACC;
//
// ACC = P_SW1;
// ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=1
// ACC |= S1_S1; //(P1.6/RxD_3, P1.7/TxD_3)
// P_SW1 = ACC;
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; //8位可变波特率
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; //9位可变波特率,校验位初始为1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; //9位可变波特率,校验位初始为0
#endif
T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2为1T模式, 并启动定时器2
AUXR |= 0x01; //选择定时器2为串口1的波特率发生器
AUXR |= 0x80; //定时器0为1T模式
//AUXR &= 0x7f; //定时器0为12T模式
ES = 1; //使能串口1中断
init_timer0();
EA = 1;
//SendString("STC15W204S-16P\r\nUart Test !\r\n");
while(1)
{
// SendString("STC15W204S-16P\r\nUart Test !\r\n");
if(STQ)
{
//SendString("enter read number--------!\r\n");
read_number = Read_MT8870();
SendData(read_number);
while(STQ);
}
}
}
/*----------------------------
UART ??????
-----------------------------*/
void Uart() interrupt 4 using 1
{
if (RI)
{
RI = 0; //清除RI位
P0 = SBUF; //P0显示串口数据
P22 = RB8; //P2.2显示校验位
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
}
}
/*----------------------------
??????
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //等待前面的数据发送完成
ACC = dat; //获取校验位P (PSW.0)
if (P) //根据P来设置校验位
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0; //设置校验位为0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1; //设置校验位为1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1; //设置校验位为1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0; //设置校验位为0
#endif
}
busy = 1;
SBUF = ACC; //写数据到UART数据寄存器
}
/*----------------------------
?????
----------------------------*/
void SendString(char *s)
{
while (*s) //检测字符串结束标志
{
SendData(*s++); //发送当前字符�
}
}
BYTE Read_MT8870(void)
{
// while(SHK==0);
if( (P1&0x0F)>15 )
return 0xFF;
else
return(CodeMT8870[P1&0x0F]);
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
/* i++;
if(i==1000)
{
P15 = ! P15;
i=0;
}
*/
if(count2-- ==0)
{
count2 = 40;
if(!SHK)
{
if(OUT_LED==1)
{
TEST_LED = ! TEST_LED;
}
else
{
TEST_LED =0;
}
}
}
if (count-- == 0) //1ms * 1000 -> 1s
{
count = 1000; //reset counter
//////////////////
if(!SHK)
{
j++;
if(j==2)
{
OUT_LED=0;
}
if(j==6)
{
OUT_LED=1;
j=1;
}
}
// TEST_LED = ! TEST_LED; //work LED flash
}
}
void init_timer0(void)
{
TMOD = 0x00; //设置定时器为模式0(16位自动重装载)
TL0 = T1MS; //初始化计时值
TH0 = T1MS >> 8;
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
STC15W204S-16P控制电话拨号串口发送.rar (17个子文件)
STC15W204S-16P控制电话拨号串口发送
204_test-serial.uvopt 5KB
Objects
204_test-serial.hex 1KB
204_test-serial 12KB
204_test-serial.lnp 144B
204_test-serial.build_log.htm 1KB
test_serial.obj 12KB
STARTUP.obj 828B
test-wave.obj 4KB
204_test-serial.uvproj 14KB
STARTUP.A51 6KB
test_serial.c 6KB
Listings
a.lst 5KB
STARTUP.lst 14KB
test-wave.lst 6KB
204_test-serial.m51 13KB
test_serial.lst 11KB
204_test-serial.uvgui.Administrator 85KB
共 17 条
- 1
弓弢
- 粉丝: 42
- 资源: 4021
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论2