久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
基于PIC16F1947芯片的USART1 驅(qū)動配置程序
[打印本頁]
作者:
medeng
時間:
2020-12-25 11:11
標(biāo)題:
基于PIC16F1947芯片的USART1 驅(qū)動配置程序
一下驅(qū)動本人已經(jīng)測試可用并穩(wěn)定,請放心使用。之所以發(fā)出來,是覺得網(wǎng)絡(luò)的好處應(yīng)該是以一人長益所需之人短,謝謝。
/////////////////////////////////////////// 頭文件 //////////////////////////////////////////////////
#ifndef __USART1_H
#define __USART1_H
#include "datatype.h" //數(shù)據(jù)類型定義文件
#include "pic.h" //PIC16F IC寄存器定義文件
//RC6(TX1)
//RC7(RX1)
//#define USART1_PRINTF_REDIRECT //printf重定向目的是為了使用printf格式化輸出
//#define USART1_RECEIVE
#ifdef USART1_RECEIVE
extern uchar usart1_receive[8 ] ; //接受數(shù)據(jù)緩沖區(qū)
extern uint8_t usart1_receive_count ; //接受數(shù)據(jù)數(shù)量
extern uint8_t usart1_receiveflage ; //接受數(shù)據(jù)完成標(biāo)志位
#endif
/*
*@breif 串口1初始化
*@prama None
*@retval None
*/
void Usart1_Init(void);
/*
*@brief usart1發(fā)送一個字節(jié)數(shù)據(jù)
*@prama buf:待發(fā)送的數(shù)據(jù)
*@retval None
*/
void Usart1_Send_Onebyte( uchar buf);
/*
*@brief usart發(fā)送字符串
*@prama buf:數(shù)據(jù)指針
*@retval None
*/
void Usart1_Send_String(const uchar *buf);
#endif
/////////////////////////////////////// 對應(yīng)的.c 文件 //////////////////////////////////////
#include "usart1.h"
#ifdef USART1_RECEIVE
uchar usart1_receive[8 ] ; //接受數(shù)據(jù)緩沖區(qū)
uint8_t usart1_receive_count ; //接受數(shù)據(jù)數(shù)量
uint8_t usart1_receiveflage = 0 ; //接受數(shù)據(jù)完成標(biāo)志位
#endif
/*
*@breif 串口1初始化
*@prama None
*@retval None
* SYNC BRG16 BRGH
0 0 0 -- SPBRG寄存器值 = 晶振頻率 / (目標(biāo)波特率 * 64) - 1
0 0 1 -- SPBRG寄存器值 = 晶振頻率 / (目標(biāo)波特率 * 16) - 1
0 1 0 -- SPBRG寄存器值 = 晶振頻率 / (目標(biāo)波特率 * 16) - 1
*/
void Usart1_Init(void)
{
//SPBRG寄存器值 = 晶振頻率 / (目標(biāo)波特率 * 64) - 1
if (SYSTEMCLK == 64 )//系統(tǒng)工作時鐘是16M
{
SP1BRGL=103; //EUSART1 波特率發(fā)生器低字節(jié):設(shè)置波特率為9600
SP1BRGH=0; //EUSART1 波特率發(fā)生器高字節(jié):
}
else//系統(tǒng)工作時鐘是16M
{
SP1BRGL=25; //EUSART1 波特率發(fā)生器低字節(jié):設(shè)置波特率為9600
SP1BRGH=0; //EUSART1 波特率發(fā)生器高字節(jié):
}
//BRG16=0; //0-使用8位,1-使用16位
//BRGH=0; //設(shè)置高速波特率,1-高速,0-低速
//SYNC=0; //SYNC=0為異步模式,SYNC=1為同步模式
TX1STA=0b00100000; //發(fā)送狀態(tài)和控制寄存器:選擇8位發(fā)送,開發(fā)送使能,選擇低速波特率模式
RC1STA=0b10010000; //接受狀態(tài)和控制寄存器:8位接收,開串口使能
BAUD1CON=0x00; //波特率控制寄存器:使用8位波特率發(fā)生器
TXIE=0; //禁止USART1發(fā)送中斷
RCIE=1; //開啟USART1接收中斷
GIE=1; //開總?cè)种袛?br /> PEIE=1; //開啟外設(shè)中斷
}
/*
*@brief usart1發(fā)送一個字節(jié)數(shù)據(jù)
*@prama buf:待發(fā)送的數(shù)據(jù)
*@retval None
*/
void Usart1_Send_Onebyte( uchar buf)
{
TX1REG = buf ;
while(!(TX1STA&0x02)); //移位發(fā)送寄存器TSR發(fā)送完成后,TRMT置1,隨即發(fā)送下一位
}
/*
*@brief usart發(fā)送字符串
*@prama buf:數(shù)據(jù)指針
*@retval None
*/
void Usart1_Send_String(const uchar *buf)
{
while(*buf!='\0')
{
TX1REG=*buf;
while(!(TX1STA&0x02)); //移位發(fā)送寄存器TSR發(fā)送完成后,TRMT置1,隨即發(fā)送下一位
buf++;
}
}
#ifdef USART1_PRINTF_REDIRECT
/*
函數(shù)名:void putch( char ch )
功能:重定向printf函數(shù)
*/
void putch( char ch )
{
while( !(TX1STA&0x02) )
continue;
TX1REG = ch;
}
#endif
/////////////////////////////////////測試文件////////////////////////////////
#ifdef PLLx4TO64M
#define SYSTEMCLK 64
#else
#define SYSTEMCLK 16
#endif
#ifdef PLLx4TO64M
__CONFIG( FOSC_HS & WDTE_OFF & BOREN_OFF ); //配置字一,選擇外部振蕩器,關(guān)閉看門狗,關(guān)閉低電壓復(fù)位
__CONFIG( VCAPEN_ON & LVP_OFF& PLLEN_ON ); //配置字二,使能RF0引腳穩(wěn)壓電容,關(guān)閉低電壓編程,打開時鐘4倍頻
#else
__CONFIG( FOSC_HS & WDTE_OFF & BOREN_OFF ); //配置字一,選擇外部振蕩器,關(guān)閉看門狗,關(guān)閉低電壓復(fù)位
__CONFIG( VCAPEN_ON & LVP_OFF& PLLEN_OFF ); //配置字二,使能RF0引腳穩(wěn)壓電容,關(guān)閉低電壓編程,關(guān)閉時鐘4倍頻
#endif
void main(void)
{
Usart1_Init(); //USART1 Init
delayms(100); //等待片內(nèi)外設(shè)初始化完成
printf("The device Is finish...\r\n");
while(1)
{
#ifdef USART1_RECEIVE //USART1 測試
{
if ( usart1_receiveflage ) //接收到符合規(guī)則的數(shù)據(jù)流
{
usart1_receiveflage=0;
Usart1_Send_String("Hello World !\r\n");
}
}
#endif
}
}
//中斷處理函數(shù)
void interrupt ISR(void)
{
//USART1 接受中斷
#ifdef USART1_RECEIVE
{
if( RCIE && RCIF ) //默認(rèn)為USART1寄存器位
{
usart1_receive[usart1_receive_count++] = RC1REG;
if (usart1_receive[0]==0x68)
{
if(usart1_receive_count>=2)
{
if(usart1_receive[1]==0x68)
{
if (usart1_receive_count>=8)
{
if(usart1_receive[7]==0x0D)
{
usart1_receiveflage =1; //置位數(shù)據(jù)接收成功標(biāo)志
}
usart1_receive_count=0;
}
}
else
{
usart1_receive_count=0;
}
}
}
else
{
usart1_receive_count=0;
}
RCIF=0; //清除中斷標(biāo)志位
}
}
#endif
}
{
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美色婷婷
|
欧美日韩一区二区在线
|
久久综合久
|
一区二区网站
|
久久久久久久成人
|
天天干天天草
|
婷婷俺也去
|
国产视频一区在线
|
欧美黄色片网站
|
日本特级淫片
|
日韩在线中文字幕
|
日韩一区中文字幕
|
亚洲精品一二三区
|
看av
|
国产成人在线播放
|
国产精品福利在线
|
日本不卡一区二区
|
久久精品一区二区三区四区五区
|
日本在线观看一区
|
欧美日韩在线播放
|
激情av在线
|
中文字幕精品一区久久久久
|
亚洲二区视频
|
免费一级黄色片
|
一级黄色免费看
|
精品日韩一区二区三区
|
国产91在线看
|
欧美资源在线
|
午夜www
|
日韩精品在线一区
|
国产美女自拍视频
|
国产伦精品一区二区三毛
|
精品国产一区二
|
精品免费观看
|
www.日韩av
|
国产成人网
|
久久视频一区
|
中文字幕一区二区三区四区
|
美日韩一区二区三区
|
免费日韩视频
|
午夜伦理福利
|