⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serialport.c

📁 对W29c040读写程序
💻 C
字号:
#include <stdio.h>
#include <reg51.h>
#include "ext_var.h"
#include "SerialPort.h"


/**********************************************************************
* 函 数 名: SerialPort_init
* 功能描述: 串口1初始化,默认为19200波特率
* 调用函数: 无
* 全局变量:
* 输    入: 
* 返    回: 无
* 设 计 者: wangyong                         日期:2004-10-20
* 修 改 者: wangyong                         日期:2006-06-15
* 版    本: WTFISCAL04 REPORTV1.0D100
**********************************************************************/
void SerialPort_init()
{
/*
	串口初始化,波特率的设置要根据具体的硬件平台设置
*/
	ET0 = 0; //关定时器0中断
	ET1 = 0; //关定时器1中断

	SCON = 0x50; //串口方式1,8位自装载模式
	TMOD = 0x20; //定时器1
	TH1  = 0xf7; // 33MHz晶振, 19200bps
	TL1  = 0xf7;
	PCON = 0x80; //SMOD=1
	TR1  = 1;

	ES=1; //开串口中断(我们这里要通过串口中断接收数据)
	EA=1; //开所有中断
}


/**********************************************************************
* 函 数 名: SerialPort_send
* 功能描述: 发送数据
* 调用函数: 无
* 全局变量:
* 输    入: portnum--串口号(1:串口1; 2:串口2)
* 返    回: 无
* 设 计 者: wangyong                         日期:2004-10-20
* 修 改 者: wangyong                         日期:2006-06-22
* 版    本: WTFISCAL04 REPORTV1.0D100
**********************************************************************/
void SerialPort_send(uchar outdata)
{
	SBUF = outdata;
	while(!TI);TI=0;
}

/**********************************************************************
* 函 数 名: SerialPort_receive
* 功能描述: 接收数据
* 调用函数: 无
* 全局变量:
* 输    入: 
* 返    回: 无
* 设 计 者: wangyong                         日期:2004-10-20
* 修 改 者: wangyong                         日期:2005-10-20
* 版    本: WTFISCAL04 REPORTV1.0D100
**********************************************************************/
/*
uchar SerialPort_receive()
{
	while(!RI);RI=0;
	return SBUF;
}
*/

/*

--  uPSD3212 的 双串口初始化
版主您好,以下是我的串口初始化代码,问题是UART能发送数据,但UART1不能发送数据,用Keil C51软仿真时,设置SCON2中的TI=1,没有中断产生。请问是怎么回事,敬请回复,谢谢。

//------------------------UART and Timer 1-----------------------------------
SCON = 0xD0; //UART: 11 bits(a Start Bit,8 data bits,a 9th data bit,a Stop Bit).

TMOD &= ~0xF0;  // clear Timer1 mode bits 
TMOD |= 0x20;     // put Timer1 into MODE 2 
TR1 = 0;              //stop timer 1.
TL1 = 208;           //1200 bps
TH1 = TL1;
T2CON = 0x00;    // Timer1 used to generate the buadrate of UART1.
TR1 = 1;             //start Timer1
ET1 = 0; 
ES  = 1; 

//------------------------UART1 and Timer 2-----------------------------------
SCON2 = 0x50;  //UART1 : 9600 bps ( 10 bits: a start bit, 8 data bits, a stop bit)
TR2 = 0;    //stop timer 2
RCAP2L = 0xB8; 
RCAP2H = 0xFF;
TL2 = RCAP2L;
TH2 = RCAP2H;
PCON = 0x0C;   //Timer2 used to generate the buadrate of UART2.
TR2 = 1;       //start Timer2.

IEA = 0x12;
EA  = 1;

--------------------------------------------------------------------------------
 
--  作者:penger
--  发布时间:2005-7-3 19:50:12

--  
看看keil 里面串口2的中断地址对吗?应该是interrupt 9  


*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -