📄 comm.c
字号:
//*************************************************************************
//#include <REG51.H>
#include "comm.h"
//#include <Reg1210.H>
#include "MSC1210.H"
#define XTAL 6000000 // 18432000 XTAL frequency
// defines for UART BAUDRATE
#define BAUDRATE 4800 // 19200bps communication baudrate
#define T2RELOAD (65536-(XTAL/32/BAUDRATE))
// defines for A/D Converter setup
#define A_CLK ((XTAL/1000000)-1) // about 1MHz Analog Clock
#define ANA_CLK (XTAL/(A_CLK+1)) // precise Analog Clock
#define DECIMATION (ANA_CLK/64/10) // 10 Hz Decimation
#define CONV_FREQ (ANA_CLK/64/DECIMATION) // Conversion Frequency
#include <string.h>
#define INBUF_LEN 32 //数据长度
unsigned char inbuf1[INBUF_LEN];
unsigned char count3=0;
/*********************************************************************
*
* 函 数 名: Com_serial_init
* 功能描述: 串口初始化
* 函数说明:
* 调用函数: 在源程序开头定义是否用w77e58或22。1184M晶振
* 全局变量:
* 输 入: 无
* 返 回: 无
* 设 计 者: yang 日期: 2002-12-09
* 修 改 者: 日期:
* 版 本:
***********************************************************************/
void comm_init (void)
{
EA = 0; //CPU中断 disable
/*
TR1 = 0; //stop timer 1
TMOD |= 0x20; // 定时器1模式: 2(8位自动装载)
CKCON |= 0x10; // Set timer 1 to clk/4 波特率*3
PCON |= 0x80; // 0x80=SMOD: 设置串口波特率倍频 波特率*2
TH1 = 0xec; //确定波特率的定时器1自动重装数据 6.0M 0xf9=4800
ET1 = 0; // disable timer 1 interrupt
TR1 = 1; //* 定时器1运行
SM0 = 0; SM1 = 1; // serial port MODE 1
SM2 = 0; // SM2=1时收到的第9位为1才置位RI_0标志
*/
// CKCON = 0; // 0 MOVX cycle stretch CKCON 时钟控制
// PDCON = 0x14; // turn on ADC-Vref, SPI and Systimers PDCON MSC1210 外围模块控制寄存器
REN = 1; //允许接收
TI = 0; //清除发送中断标志
RI = 0; //清除接收中断标志
ES = 1; //串口中断允许
PS = 0; //设量串口中断优先级低
EA = 1; //CPU中断允许
}
void Serial_init(void)
{
// Setup Serial Interface
T2CON = 0x34; // Use Timer 2 as baudrate generator
RCAP2H = (T2RELOAD >> 8); // baudrate reload factor
RCAP2L = T2RELOAD;
SCON = 0x52; // enable serial uart & receiver
P3DDRL &= 0xF0; // set port pins of UART to input/strong drive output
P3DDRL |= 0x07; // set port pins of UART to input/strong drive output
}
//向串口发送一个字符
void put_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void put_string_com(unsigned char *str,unsigned int strlen)
{
unsigned int k=0;
do
{
put_char_com(*(str + k));
k++;
} while(k < strlen);
}
void get_string_com(unsigned char *c ,unsigned char n)
{
unsigned char i;
while (count3 < n);
for (i=0;i<n;i++)
c[i]=inbuf1[i];
count3=0;
}
//串口接收中断函数
void serial () interrupt 4 using 3
{
if(RI)
{
RI = 0;
inbuf1[count3]=SBUF;
if( (count3==(INBUF_LEN-1)))
count3=0;//如果串口接收的数据达到INBUF_LEN个
else
count3++;
}
// send_char_com(read_flag);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -