C8051f410串口通信接口设计实验

合集下载

基于C8051f410的DS1302 实时时钟实验

基于C8051f410的DS1302 实时时钟实验

// 地址,命令
DS1302_Input_Byte(((da/10)<<4)|(da%10));
// 写 1Byte 数据
DS1302_CLK = 1;
DS1302_RST = 0;
}
读一个字节和写一个字节有明显的不一样,先是写地址字节,然后再读数据字节,写地 址字节时上升沿有效,而读数据字节时下降沿有效,当然前提是 RST 信号必须拉高。写地 址字节和读数据字节同是 LSB 开始。
2、时序分析
以上是 DS1302 一个字节写入的时序图。第一个字节是地址字节,第二个字节是数据字 节。RST 信号必须拉高,否则数据的输入是无效的。换一句话说,RST 信号控制数据、时 间信号输入的开始和结束。地址字节和数据字节的读取时上升沿有效,而且是由 LSB 开始
读入。以下是驱动函数,仅供参考:
反过来的转化:(( timedata & 0x70) >> 4)*10 + ( timedata & 0x0F )。
四、实验现象和结果
1、接好硬件电路,编译运行程序,观察液晶 12864 显示如下内容,图中红色框内为显 示的年月日星期,时分秒。
图 12864 显示效果图
五、预习要求
1、读懂程序; 2、预先给出运算结果,以便和实验结果比较;
//写 DS1302,ucAddr 地址, ucData 要写的数据
void Write1302(unsigned char ucAddr, unsigned char da)
{
DS1302_RST = 0;
DS1302_CLK = 0;
DS1302_RST = 1;
DS1302_Input_Byte(ucAddr);

C8051F系列单片机串口通讯程序-推荐下载

C8051F系列单片机串口通讯程序-推荐下载

C8051F系列单片机串口通讯程序采用C8051F020单片机//串口编程--接收PC发过来的字符串,回发字符串.发送期间中断控制LED灯闪烁//采用外部晶振22.1184MHz 使用定时器1,方式2产生波特率,SMOD = 0或者1 //定时器初值X=256-SYSCLK*(SMOD+1)/(BAUDRATE*384)/#include <C8051F020.h>sfr16 TMR3RL = 0x92; //定时器3重装载寄存器sfr16 TMR3 = 0x94; //定时器3计数器#define uchar unsigned char#define uint unsigned int//----------------------------------------------------------------------//参数设置区//----------------------------------------------------------------------#define BAUDRATE 4800 //波特率bps#define CLKOUT 22118400 //外部晶振,修改也要修改OSCXCN#define SMODVAL 0 //SMOD的值,修改请也修改PCONVAL#define PCONVAL 0x00 //PCON的值,=0x00时SMOD0=0; =0x80时SMOD0=1 #define TXVAL (256-CLKOUT*(SMODVAL+1)/BAUDRATE/384) //定时器初值#define MAX_LEN 10 //每次接收/发送字符串的长度//---------------------------------------------------------------------//全局变量//---------------------------------------------------------------------sbit LED = P1^6; //LED '1'亮'0'灭bit readFlag = 0; //读标志uchar readCounts = 0; //已经读取的字符个数,与MAX_LEN比较uchar idata trdata[MAX_LEN]; //要接收/发送的字符串//----------------------------------------------------------------------//子函数声明//----------------------------------------------------------------------void SYSCLK_Init(void); //系统时钟初始化void PORT_Init(void); //端口初始化void UART0_Init(void); //串口UART0初始化void Send_Char(uchar ch); //发送单个字符void Send_String(uchar * str, uint len); //发送一个字符串void UART0_ISR(); //串口中断服务程序,接收字符void Timer3_Init(uint counts); //定时器3初始化void Timer3_ISR(void); //定时器3中断服务程序//----------------------------------------------------------------------//主函数//----------------------------------------------------------------------void main(void){WDTCN = 0xde; //禁止看门狗WDTCN = 0xad;SYSCLK_Init(); //时钟初始化PORT_Init(); //端口初始化UART0_Init(); //串口初始化Timer3_Init(CLKOUT/12/10); //定时器初始化EA = 1; //开全局中断while(1){if(readFlag) //已经读取{readFlag = 0; //清零Send_String(trdata,MAX_LEN); //发送字符串}}}//----------------------------------------------------------------------//子函数具体实现//----------------------------------------------------------------------//系统时钟初始化void SYSCLK_Init(void){uint i;OSCXCN = 0x67; //采用外部晶振22.1184MHz,不分频. 选型OSCXCN=0110,0111 for(i=0;i<256;i++); //等待>1mswhile(!(OSCXCN&0x80)); //查询直到XTLVLD=1,晶振稳定OSCICN = 0x88; //切换到外部振荡器,允许时钟失效监测器. OSCICN=1000,1000 }//端口初始化void PORT_Init(void){XBR0 = 0x04; //允许UART0,RX,TX连到2个端口引脚. XBR0=0000,0100XBR1 = 0x00;XBR2 = 0x40; //交*开关使能P0MDOUT |= 0x03; //P0.0为推拉方式输出,即TX0,RX0所在的端口0000,0011P1MDOUT |=0x40; //P1.6为推拉方式输出,即LED所在的端口0100,0000}//串口初始化void UART0_Init(void){SCON0 = 0x50; //选择串口方式1,波特率可变SCON0=0101,0000TMOD = 0x20; //选择T1,方式2,自动再装入8位计数器TH1 = (int)TXVAL; //T1初值,根据波特率,时钟等计算. 0xF4, bps=4800bpsTL1 = (int)TXVAL;ES0 = 1; //UART0中断开启TR1 = 1; //启动定时器T1PCON |= PCONVAL; //PCON=0x00,SMOD = 0 ; PCON=0x80,SMOD=1 TI0 = 1; //声明TX0就绪,可以发送TR0 = 1;}//定时器初始化void Timer3_Init(uint counts){TMR3CN = 0x00; //禁止定时器T3,清TF3,采用SYSCLK/12为时基TMR3RL = -counts; //初始化重装载值TMR3 = 0xffff; //设置为立即重装载EIE2 |= 0x01; //T3中断开启TMR3CN |= 0x04; //启动T3}//发送单个字符void Send_Char(uchar ch){SBUF0 = ch; //送入缓冲区while(TI0 == 0); //等待发送完毕TI0 = 0; //软件清零}//发送字符串,调用Send_Char() len字符串长度void Send_String(uchar * str,uint len){uint k = 0;do{Send_Char(*(str + k));k++;} while(k < len);}//定时器3中断服务程序void Timer3_ISR(void) interrupt 14 using 0{TMR3CN &= ~(0x80); //清TF3LED = ~LED;}//UART0中断服务程序. 接收字符void UART0_ISR(void) interrupt 4 using 1{uchar rxch;if(RI0) //中断标志RI0=1 数据完整接收{RI0 = 0; //软件清零rxch = SBUF0; //读缓冲if(readCounts>=MAX_LEN){readCounts = 0;readFlag = 1;}trdata[readCounts] = rxch; //存入数组,供发送readCounts++;}}//-------------------------------------------------------------//程序结束。

C8051f410模数与数模转换器配置实验

C8051f410模数与数模转换器配置实验

万用表测试,以利于对比实验结果。 实验参考代码 D/A 转换:
#include <c8051f410.h>
// SFR declarations
sfr16 TMR3RL sfr16 TMR3 sfr16 IDA0
= 0x92; = 0x94; = 0x96;
// Timer3 reload value // Timer3 counter // IDA0 high and low bytes
TIMER3_Init(SYSCLK/SAMPLE_RATE_DAC);
EA = 1;
// Enable global interrupts
while(1) {} } 实验参考代码 A/D 转换: #include <c8051f410.h> #include <stdio.h>
// Wait for interrupt // SFR declarations
#define SYSCLK
24500000
// Internal oscillator frequency in Hz
#define SAMPLE_RATE_DAC 100000L
#define PHASE_PRECISION 65536
#define FREQUENCY
1000
// DAC sampling rate in Hz // range of phase accumulator // Frequency of output waveform in Hz
static unsigned phase_acc = 0;
// Holds phase accumulator
int SIN_temp; unsigned char index; phase_acc += PHASE_ADD; index = phase_acc >> 8; SIN_temp = SINE_TABLE[index];

USART通信接口设计实验

USART通信接口设计实验
SBUF0 = UART_Buffer[i]; while(!TI0); TI0 = 0; }
UART_Data = 0; } } }
四、实验现象和结果
1、把串口线和 PC 机连接起来,运行程序后,通过串口调试软件发送 ASCII 码字符(需 要以回车键结尾)到单片机实验板,单片机实验板接收到从串口调试软件发送过来的 ASCII
实验四 UART 通信接口设计实验
一、实验目的
1、理解用异步串行通信进行 RS232 通信的原理并能掌握其方法及编程;
2、学习使用定时器 T1 做波特率发生器,掌握计算波特率的方法。
二、实验仪器
1、自制的 C8051f410 实验开发板 1 块
2、直流稳压电源、示波器
各1台
3、仿真器(U-EC6)
1只
码字符后,又将同样的字符回送给串口调试软件,这样串口调试软件可以看到返回同样的字
符,如果收发的字符相同,则说明 PC 机与单片机实验板之间的通信成功,如下图所示。
注: 串口通信波特率、位数据位、停止位、校验等参数设置值参考上图。
五、预习要求
1、读懂程序; 2、预先给出修改代码,以便更快更好的得出实验结果;
4、PC 机
1台
三、实验内容
实验任务:编写程序将单片机的 P0.4、P0.5 口配置为串口 0 通信口,将 PC 机发送给
c8051f410 的数据原样发回 PC 机,程序中用“0x0d”作为帧尾标志。
PC 端发送、接收可采用串口接收软件“串口调试助手 V2.1”。
在程序中通过交叉开关配置 TX0,RX0 分别到 P0.4、P0.5 引脚,由于 I/O 口是 TTL 电 平信号,需要通过 MAX232 转换为 RS-232 电平后才能与 PC 机连接,连接电路如上图所示。

关于C8051F410的设计报告

关于C8051F410的设计报告

2013年全国大学生电子设计大赛报告基于C8051F410单片机的设计摘要:微处理器在社会发展中扮演着非同寻常的角色,渗透到了各行各业。

经过不断的发展与创新,单片机大致可分为4位、8位、16位和32位。

C8051F410单片机片内集成了高频振荡源,并具备了多级分频系统以满足各种个性化的需要。

强大的非侵入式JTAG/C2调试手段,是传统仿真器调试模式所不能比拟的,可使内核和全部资源完全透明和可操作化,可以方便地完成下载和硬件仿真,且不占用内部片内资源。

芯片上除了P0~P2,还包括温度传感器和电源,晶振及片上温度传感器等外设集合为一体。

增加了交叉开关,可以灵活的将片内资源分配到I/O端口,3.3V的供电模式,内核的低电压使系统功耗进一步降低。

关键词:微处理器 C8051F410 传感器交叉开关Abstract:the microprocessor plays beautifully role in social development, penetrated into all walks of life. Through continuous development and innovation, SCM can be roughly divided into 4, 8, 16 and 32. C8051F410 micro controller on-chip integration of the high frequency oscillation source, and with the multi-level division system to meet the various needs of personalized. A powerful non-invasive JTAG/C2 debugging tools, is a traditional emulator debug mode can not match, can make the kernel and all the resources completely transparent and operational, can finish downloading and hardware simulation conveniently, and does not occupy the internal on-chip resources. Chip P0~P2 in addition, also includes a temperature sensor and a power supply, a crystal and on-chip temperature sensor is integrated peripherals such as set. Increase the crossbar switch, can be flexible to on-chip resource allocation to the I/O port, 3.3V low voltage power supply mode, the power consumption of the system to further reduce the kernel.Keywords: microprocessor C8051F410 sensor switch目录一、前言.............................. (1)二、总体方案设计...................... .. (1)1、方案设计....................... (1)2、方案论证与比较 ....................... (1)3、方案选择...................... (1)三、单元模块设计...................... .. (2)1、各单元模块功能介绍及电路设计......... .. (2)2、电路参数的计算及元器件的选择........................... .. (5)3、特殊器件的介绍................ . (6)4、各单元模块的联接.............. (7)四、系统调试.......................... .. (8)五、系统功能、指标参数......................... . (9)六、设计总结........................... .................................... .9七、参考文献............................ .................................. ..9八、附录 (9)1、电路原理图...................... .................................. .92、PCB图.......................................... ......... . (10)3、源程序.......................... (10)一、前言C8051F410器件是完全集成的低功耗混合信号片上系统型MCU,它的特性主要有:高速、流水线结构的8051兼容的微控制器核(可达50MIPS);高精度可编程的24.5MHz内部振荡器; 4个通用的16位定时器;硬件实时时钟(smaRTClock),工作电压可低至1V,带64字节电池后备RAM和后备稳压器。

C8051F410实验板使用手册【新】

C8051F410实验板使用手册【新】
C8051F410实验板使用手册
一、C8051F410实验板原理图
二、C8051F410实验板装配说明
1、套件包括:元器件1袋(51个)、电路板1张(已经焊过贴片元件37个)、USB线1条;
2、,一般按照由低到高的顺序紧贴电路板焊接;
3、注意元器件的极性和方向问题;
4、红外发射LED、红外接收SM0038、温度测量DS18B20、LCD1602、LCD12864、串口连接线和纽扣电池等是预留做功能扩展的器件不包含在本套件中,暂时不必焊接。
三、C8051F410实验板照片
四、C8051F410实验板资源分布图
五、C8051F410实验板元件清单
名称
数量
说明
备注
贴片元件
和PCB板
C8051F410
1
已经焊接到电路板上了
1117-3.3
1
IN4148
2
10Ω
1
270Ω
8
510Ω
10
1KΩ
4
2.2KΩ
2
2.5KΩ
1
8050
1
22pF
2
0.1uF
4.7 uF
1
注意极性
10uF
8
注意极性
LED绿
1
注意极性
LED红
8
注意极性
按键
16
无极性
4
PCB板
1
电源线
USB线
1
直插元件
(共52个)
共阴四联数码管
2
注意方向
CH452
1
注意串口座(孔)
1
USB座
1
钮扣电池座
1
蜂鸣器
1

C8051f410利用SMBUS实现基于I2C器件操作实验

C8051f410利用SMBUS实现基于I2C器件操作实验

实验参 实验参考代码: 代码: #include <C8051F410.h> #define SYSCLK 24500000 #define SMB_FREQUENCY 50000 #define EEPROM_ADDR 0xA0 #define WRITE 0x00 #define READ 0x01 unsigned char bit WORD_ADDR; SMB_RW; // System clock frequency in Hz // SCL clock rate, between 10kHz and 100kHz // Device address(7 bits, lsb is a don't care). // SMBus WRITE command // SMBus READ command
// 是否伪读 // 时候重复发送 START 信号,轮询 // Timer3 reload registers // Timer3 counter registers
sbit LED = P0^5; sbit SDA = P0^2; sbit SCL = P0^3; void SMBus_Init (void) { SMB0CF = 0x5D; SMB0CF |= 0x80; }
// Used by the ISR to flag failed transfers // 收发字符个数 // Send a start
switch (SMB0CN & 0xF0) // Status vector { case 0xE0: // Master Transmitter/Receiver: START condition transmitted. SMB0DAT = EEPROM_ADDR; // Load address of the target slave SMB0DAT &= 0xFE; // Clear the LSB of the address for the R/W bit SMB0DAT |= SMB_RW; // Load R/W bit STA = 0; // Manually clear START bit i = 0; // Reset data byte counter break; case 0xC0: // Master Transmitter: Data byte (or Slave Address) transmitted if (ACK) // Slave Address or Data Byte Acknowledged? { if (SEND_START) { STA = 1; SEND_START = 0; break; } if(SMB_SENDWORDADDR) { SMB_SENDWORDADDR = 0; SMB0DAT = WORD_ADDR; if (SMB_RANDOMREAD) { SEND_START = 1; // Send a START after the next ACK cycle SMB_RW = READ;

80C51单片机串口通信(含原程序)

80C51单片机串口通信(含原程序)
transbyte(buf);
buf=NUMCODETAB[num];
transbyte(buf);
buf=NUMCODETAB[num];
transbyte(buf);
buf=NUMCODETAB[num];
transbyte(buf);
buf=NUMCODETAB[num];
transbyte(buf);
void send(uchar dat)
{
SBUF=dat;
while(TI==0);
TI=0;
}
void delay(void)
{
uchar x,y;
for(x=0;x<220;x++)
for(y=0;y<250;Leabharlann ++);}
void main(void)
{
uchar i;
TMOD=0x20;
SCON=0x40;
并将这些代码用发光二极管在发送端显示(流水灯效果)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit DIPIN = P1^3;
uint num;
uchar receive (void)
{
uchar dat;
while(RI==0);
RI=0;
dat=SBUF;
SBUF=dat;
return dat;
}
unsigned char code NUMCODETAB[]={0xFC,0x60,0xDA,0xF2, //数字0,1,2,3
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六、思考题
1、改动代码使串口通信波特率为 115200,将原代码中采用中断方式接收字符的代码改 为采用查询方式接收、采用查询方式发送字符的代码改为采用中断方式发送,程序实现的功 能保持不变。
// WDTE = 0 (clear watchdog timer enable) // Initialize Port I/O // Initialize Oscillator
EA = 1;
while(1) {
if((UART_Data != 0) && (Byte == 13)) {
for(i=0;i<UART_Data;i++) {
TH1 = 0x96; CKCON &= ~0x0B;
TL1 = TH1; TMOD &= ~0xf0; TMOD |= 0x20; TR1 = 1;
// init Timer1 // TMOD: timer 1 in 8-bit autoreload
// START Timer1
IP |= 0x10; ES0 = 1;
// Clear interrupt flag // Read a character from UART // Store in array
void main (void) {
unsigned char i; PCA0MD &= ~0x40; PORT_Init(); SYSCLK_Init (); UART0_Init();
码字符后,又将同样的字符回送给串口调试软件,这样串口调试软件可以看到返回同样的字
符,如果收发的字符相同,则说明 PC 机与单片机实验板之间的通信成功,如下图所示。
注: 串口通信波特率、位数据位、停止位、校验等参数设置值参考上图。
五、预习要求
1、读懂程序; 2、预先给出修改代码,以便更快更好的得出实验结果;
实验二 UART 通信接口设计实验
一、实验目的
1、理解用异步串行通信进行 RS232 通信的原理并能掌握其方法及编程;
2、学习使用定时器 T2 做波特率发生器,掌握计算波特率的方法。
二、实验仪器
1、自制的 C8051f410 实验开发板 1 块
2、直C6)
1只
实验参考代码: #include <c8051f410.h>
// SFR declarations
#define SYSCLK
24500000
#define BAUDRATE
9600
// SYSCLK frequency in Hz // Baud rate of UART in bps
unsigned char UART_Buffer[64]; unsigned char UART_Data = 0; static char Byte;
// P0.4 digital push-pull // P0.5 digital open-drain void PORT_Init (void) {
P0MDOUT |= 0x10; XBR0 = 0x01; XBR1 = 0x40; }
UART TX UART RX
// Enable UTX as push-pull output // Enable UART on P0.4(TX) and P0.5(RX) // Enable crossbar and weak pull-ups
4、PC 机
1台
三、实验内容
实验任务:编写程序将单片机的 P0.4、P0.5 口配置为串口 0 通信口,将 PC 机发送给
c8051f410 的数据原样发回 PC 机,程序中用“0x0d”作为帧尾标志。
PC 端发送、接收可采用串口接收软件“串口调试助手 V2.1”。
在程序中通过交叉开关配置 TX0,RX0 分别到 P0.4、P0.5 引脚,由于 I/O 口是 TTL 电 平信号,需要通过 MAX232 转换为 RS-232 电平后才能与 PC 机连接,连接电路如上图所示。
// Make UART high priority // Enable UART0 interrupts
}
void UART0_Interrupt (void) interrupt 4 {
if (RI0 == 1) {
RI0 = 0; Byte = SBUF0; UART_Buffer[UART_Data] = Byte; UART_Data++; } }
SBUF0 = UART_Buffer[i]; while(!TI0); TI0 = 0; }
UART_Data = 0; } } }
四、实验现象和结果
1、把串口线和 PC 机连接起来,运行程序后,通过串口调试软件发送 ASCII 码字符(需 要以回车键结尾)到单片机实验板,单片机实验板接收到从串口调试软件发送过来的 ASCII
void SYSCLK_Init (void) {
OSCICN = 0x87; RSTSRC = 0x04; }
// configure internal oscillator for 24.5MHz // enable missing clock detector
// Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
void UART0_Init (void)
{
SCON0 = 0x10;
// SCON0: 8-bit variable bit rate
//
level of STOP bit is ignored
//
RX enabled
//
ninth bits are zeros
//
clear RI0 and TI0 bits
相关文档
最新文档