娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月26日(星期日)

2019年01月26日 | STC12C5A60S2之串口

發(fā)布者:行者無疆1978 來源: eefocus關(guān)鍵字:STC12C5A60S2  串口 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

STC12C5A60S2單片機(jī)的串口從傳統(tǒng)的一個(gè)擴(kuò)展到了兩個(gè),


而且還增加了一個(gè)獨(dú)立波特率發(fā)生器,把定時(shí)器1解放了出來,真的不是一般的方便,


還而且能用1T模式,速度大大滴提高了。。。


于是,就寫了串口模塊,方便以后用



有關(guān)STC12C5A60S2串口的寄存器


 

 

 

UART.C

/*

 * 文 件 名:UART.C

 * 芯    片:STC12C5A60S2

 * 晶    振:12MHz

 * 創(chuàng) 建 者:冷月

 * 創(chuàng)建日期:2010.8.16

 * 修 改 者:

 * 修改日期:

 * 功能描述:STC12C5A系列單片機(jī)串口模塊,包括串口1和串口2,方式1,使用獨(dú)立波特率發(fā)生器

 * 功能:1.發(fā)送一個(gè)字符;2.發(fā)送一個(gè)字符串;3.接收一個(gè)字符。

 */


#include

#include

#include "UART.H"


#define uchar unsigned char

#define uint unsigned int


//緩存串口1和串口2接收到的字符

uchar UART1_Recv_Val = 0;

uchar UART2_Recv_Val = 0;



/*

 * 函 數(shù) 名:UART1_Init

 * 功能描述:串口1初始化

 * 輸入?yún)?shù):RELOAD:BRT初值;

 * doubleBaud:0波特率不加倍,1波特率加倍

 * timeMod:0獨(dú)立波特率發(fā)生器12T模式,1為1T模式

 * 返 回 值:無

 */

void UART1_Init(uchar RELOAD, bit doubleBaud, bit timeMod)

{

SCON |= 0x50; //串口1方式1,接收充許


BRT = RELOAD; //波特率2400


if (timeMod == 1) //1T

{

//T0x12   T1x12   UM0x6   BRTR    S2SMOD  BRTx12  EXTRAM  S1BRS

AUXR |= 0x15; //串口1使用獨(dú)立波特率發(fā)生器,獨(dú)立波特率發(fā)生器1T

}

else //12T

{

AUXR |= 0x11;

}


if (doubleBaud == 1)

{

PCON |= 0x80;   //波特率加倍

}

else

{

PCON &= 0x7F;   //波特率不加倍

}


EA = 1;

ES = 1; //充許串口1中斷

}



/*

 * 函 數(shù) 名:UART2_Init

 * 功能描述:串口2初始化

 * 輸入?yún)?shù):RELOAD:BRT初值;

 * doubleBaud:0波特率不加倍,1波特率加倍

 * timeMod:0獨(dú)立波特率發(fā)生器12T模式,1為1T模式

 * 返 回 值:無

 */

void UART2_Init(uchar RELOAD, bit doubleBaud, bit timeMod)

{

//S2SM0  S2SM1   S2SM2   S2REN   S2TB8   S2RB8   S2TI     S2RI

S2CON |= 0x50; //串口2,方式1,接收充許


BRT = RELOAD;


if (timeMod == 1) //1T

{

//T0x12   T1x12   UM0x6   BRTR    S2SMOD  BRTx12  EXTRAM  S1BRS

AUXR |= 0x14; //串口1使用獨(dú)立波特率發(fā)生器,獨(dú)立波特率發(fā)生器1T

}

else //12T

{

AUXR = (AUXR | 0x10) & 0xFB;

}


if (doubleBaud == 1)

{

AUXR |= 0x08; //波特率加倍

}

else

{

AUXR &= 0xF7; //波特率不加倍

}


EA = 1;

//-       -       -       -       -       -       ESPI    ES2

IE2 |= 0x01; //充許串口2中斷

}



/*

 * 函 數(shù) 名:UART1_SendOneChar

 * 功能描述:串口1發(fā)送一個(gè)字符

 * 輸入?yún)?shù):val:要發(fā)送的字符

 * 返 回 值:無

 */

void UART1_SendOneChar(uchar val)

{

//ES = 0; //關(guān)閉串口1中斷


SBUF = val;

while(TI == 0);

TI = 0;


//ES = 1;    //恢復(fù)串口1中斷

}    



/*

 * 函 數(shù) 名:UART2_SendOneChar

 * 功能描述:串口2發(fā)送一個(gè)字符

 * 輸入?yún)?shù):val:要發(fā)送的字符

 * 返 回 值:無

 */

void UART2_SendOneChar(uchar val)

{

//IE2 = 0x00;   //關(guān)閉串口2中斷


S2BUF = val;

while ((S2CON & 0x02) == 0);

S2CON &= 0xFD;


//IE2 = 0x01; //恢復(fù)串口2中斷

}



/*

 * 函 數(shù) 名:UART1_SendStr

 * 功能描述:串口1發(fā)送字符串

 * 輸入?yún)?shù):str:指向要發(fā)送的字符串的指針

 * 返 回 值:無

 */

void UART1_SendStr(uchar *str)

{

while( (*str)!='/0' )

{

UART1_SendOneChar(*str);

str++;

}

}



/*

 * 函 數(shù) 名:UART2_SendStr

 * 功能描述:串口2發(fā)送字符串

 * 輸入?yún)?shù):str:指向要發(fā)送的字符串的指針

 * 返 回 值:無

 */

void UART2_SendStr(uchar *str)

{

while( (*str)!='/0' )

{

UART2_SendOneChar(*str);

str++;

}

}



/*

 * 函 數(shù) 名:UART1_Int

 * 功能描述:串口1中斷服務(wù)程序,接收串口1字符

 * 輸入?yún)?shù):無

 * 返 回 值:無

 */

void UART1_Int(void) interrupt 4

{

if (RI == 1)

{

RI = 0;

UART1_Recv_Val = SBUF;

}

}



/*

 * 函 數(shù) 名:UART2_Int

 * 功能描述:串口2中斷服務(wù)程序,接收串口2字符

 * 輸入?yún)?shù):無

 * 返 回 值:無

 */

void UART2_Int(void) interrupt 8

{

if ((S2CON & 0x01) == 1)

{

S2CON &= 0xFE;

UART2_Recv_Val = S2BUF;

}

}

UART.H

/*

 * 模 塊 名:UART.H

 * 芯    片:STC12C5A60S2

 * 晶    振:12MHz

 * 創(chuàng) 建 者:冷月

 * 創(chuàng)建日期:2010.8.16

 * 修 改 者:

 * 修改日期:

 * 功能描述:STC12C5A系列單片機(jī)串口模塊,包括串口1和串口2,方式1,使用獨(dú)立波特率發(fā)生器

 * 可設(shè)置串口波特率

 * 功能:1.發(fā)送一個(gè)字符;2.發(fā)送一個(gè)字符串;3.接收一個(gè)字符。

 */


#ifndef _UART_H_

#define _UART_H_


#define uchar unsigned char

#define uint unsigned int


//定義串口1口開關(guān),關(guān)閉則不能接收數(shù)據(jù)

#define OpenUART1() ES=1

#define CloseUART1() ES=0

#define OpenUART2() IE2|=0x01

#define CloseUART2() IE2&=0xFE


//緩存串口1和串口2接收到的字符

extern uchar UART1_Recv_Val;

extern uchar UART2_Recv_Val;



/*

 * 函 數(shù) 名:UART1_Init

 * 調(diào)    用:UART1_Init(0xD9, 0, 0);

 * BRT=OxD9,波特率不加倍,獨(dú)立波特率發(fā)生器12T模式,F(xiàn)osc = 12MHz, Baud0 = 9600

 * UART1_Init(0xB2, 1, 1);

 * BRT=0xB2,波特率加倍,獨(dú)立波特率發(fā)生器1T模式,Fosc = 12MHz, Baud0 = 9600

 * 功能描述:串口1初始化

 */

void UART1_Init(uchar RELOAD, bit doubleBaud, bit timeMod);



/*

 * 函 數(shù) 名:UART2_Init

 * 調(diào)    用:UART2_Init(0xD9, 0, 0);

 * BRT=OxD9,波特率不加倍,獨(dú)立波特率發(fā)生器12T模式,F(xiàn)osc = 12MHz, Baud0 = 9600

 * UART2_Init(0xB2, 1, 1);

 * BRT=0xB2,波特率加倍,獨(dú)立波特率發(fā)生器1T模式,Fosc = 12MHz, Baud0 = 9600

 * 功能描述:串口2初始化

 */

void UART2_Init(uchar RELOAD, bit doubleBaud, bit timeMod);



/*

 * 函 數(shù) 名:UART1_SendOneChar

 * 調(diào)    用:UART1_SendOneChar('A');

 * 功能描述:串口1發(fā)送一個(gè)字符

 */

void UART1_SendOneChar(uchar val);



/*

 * 函 數(shù) 名:UART2_SendOneChar

 * 調(diào)    用:UART2_SendOneChar('A');

 * 功能描述:串口2發(fā)送一個(gè)字符

 */

void UART2_SendOneChar(uchar val);



/*

 * 函 數(shù) 名:UART1_SendStr

 * 調(diào)    用:UART1_SendStr("MCU");

 * 功能描述:串口1發(fā)送字符串

 */

void UART1_SendStr(uchar *str);



/*

 * 函 數(shù) 名:UART2_SendStr

 * 調(diào)    用:UART2_SendStr("MCU");

 * 功能描述:串口2發(fā)送字符串

 */

void UART2_SendStr(uchar *str);



#endif

main.c

/*

 * 文 件 名:UART.C

 * 芯    片:STC12C5A60S2

 * 晶    振:12MHz

 * 創(chuàng) 建 者:冷月

 * 創(chuàng)建日期:2010.8.16

 * 修 改 者:

 * 修改日期:

 * 功能描述:單片機(jī)通過串口與PC機(jī)通訊,通過PC機(jī)控制與單片機(jī)IO相連的LED燈亮滅

 * 串口1和串口2使用獨(dú)立波特率發(fā)生器,波特率默認(rèn)設(shè)置為9600,波特率不加倍,1T模式

 */


#include

#include

#include "UART.H"


#define uchar unsigned char

#define uint unsigned int



//獨(dú)立波特率發(fā)生器初值,1T模式

//Fosc = 晶振頻率, Baud0 = 標(biāo)準(zhǔn)波特率

//RELOAD = 256 - INT(Fosc/Baud0/32 + 0.5)

//Baud = Fosc/(256 - RELOAD)/32

//error = (Baud - Baud0)/Baud0 * 100%

uchar RELOAD = 0xD9; //Fosc = 12MHz, Baud0 = 9600


//波特率是否加倍,0不倍,1加倍

bit doubleBaud = 0;


//獨(dú)立波特率發(fā)生器,0為12T模式,1為1T模式

bit timeMod = 1;



/*LED定義*/

sbit LED1 = P1^0;

sbit LED2 = P1^1;



/*

 * 函 數(shù) 名:main

 * 功能描述:程序入口

 * 輸入?yún)?shù):無

 * 返 回 值:無

 */

void main(void)

{

//串口標(biāo)志位,0使用串口1,1使用串口2

bit UART_flag = 1;


LED1 = 1;

LED1 = 1;


//串口1和串口2初始化

UART1_Init(RELOAD, doubleBaud, timeMod);

UART2_Init(RELOAD, doubleBaud, timeMod);


//先用串口1接收字符

OpenUART1();

CloseUART2();


UART1_SendOneChar(0x0C); //超級(jí)終端清屏

UART1_SendStr("/r/n");

UART1_SendStr("/r/n");

UART1_SendStr("1.串口1通訊/r/n");

UART2_SendStr("2.串口2通訊/r/n");


while (UART1_Recv_Val == 0);


UART1_SendStr("/r/n"); //換行


if (UART1_Recv_Val == '1')

{

OpenUART1();

CloseUART2();

UART1_SendStr("Light LED(UART1):/r/n");


UART_flag = 0;

}

else

{

CloseUART1();

OpenUART2();

UART2_SendStr("Light LED(UART2):/r/n");


UART_flag = 1;

}

UART1_Recv_Val = 0; //緩存清零

UART2_Recv_Val = 0; //緩存清零


while (1)

{

if (UART_flag == 0) //串口1接收字符

{

if (UART1_Recv_Val != 0)

{

switch (UART1_Recv_Val)

{

case '1':

LED1 = ~LED1;

break;

case '2':

LED2 = ~LED2;

break;

default:

LED1 = 1;

LED1 = 1;

break;

}

UART1_Recv_Val = 0;    //緩存清零

}

}

else    //串口2接收字符

{

if (UART2_Recv_Val != 0)

{

switch (UART2_Recv_Val)

{

case '1':

LED1 = ~LED1;

break;

case '2':

LED2 = ~LED2;

break;

default:

LED1 = 1;

LED1 = 1;

break;

}

UART2_Recv_Val = 0;    //緩存清零

}

}

}

}


最后,用超級(jí)終端調(diào)試一下下


設(shè)置如下

實(shí)驗(yàn)結(jié)果:


關(guān)鍵字:STC12C5A60S2  串口 引用地址:STC12C5A60S2之串口

上一篇:STC12系列單片機(jī)冷啟動(dòng)、熱啟動(dòng)
下一篇:STC12系列單片機(jī)PCA模塊應(yīng)用

推薦閱讀

電子網(wǎng)消息,市場(chǎng)研究機(jī)構(gòu)GFK的數(shù)據(jù)顯示,2017年第四季度全球智能手機(jī)銷量為3.97億部,同比增長1%;平均售價(jià)增至363美元,同比增長10%;全球智能手機(jī)實(shí)現(xiàn)營收4790億美元。GfK移動(dòng)通訊零售研究全球總監(jiān)Arndt Polifke評(píng)論說:“全球智能手機(jī)連續(xù)第四個(gè)季度實(shí)現(xiàn)增長,2017年第四季度售出3.97億部,增幅僅為1%,但銷售額卻同比增長11%。對(duì)于如此成熟的科技產(chǎn)...
格力這次做洗衣機(jī)業(yè)務(wù)倒沒有大事宣傳,而是以巨額的投資邁出了這一步,據(jù)報(bào)道指它投資50億元的成都產(chǎn)業(yè)園動(dòng)工,這將是格力首個(gè)洗衣機(jī)生產(chǎn)基地,希望以實(shí)實(shí)在在的腳步證明它正在向6000億營收的目標(biāo)前進(jìn),不過柏穎科技認(rèn)為僅靠建設(shè)工廠就想在洗衣機(jī)市場(chǎng)分羹,并不容易,甚至可能重蹈手機(jī)業(yè)務(wù)覆轍。 洗衣機(jī)市場(chǎng)格局已定以格力的直接競爭對(duì)手美的為例,美的開...
工業(yè)機(jī)器人本體競爭格局:四大家族壟斷,國產(chǎn)品牌突圍工業(yè)機(jī)器人“四大家族”日本發(fā)那科、瑞士ABB、日本安川、德國KUKA,在全球高端應(yīng)用領(lǐng)域占有較高市占率。國內(nèi)品牌廣州啟帆、埃夫特、新松、埃斯頓、廣州數(shù)控、新時(shí)達(dá)享受市場(chǎng)增長紅利快速成長,正在國內(nèi)市場(chǎng)實(shí)現(xiàn)突圍。2016年,“四大家族”全球市場(chǎng)中的市占率合計(jì)達(dá)58%,占據(jù)了全球市場(chǎng)份額的超過半壁江...
硅是具有半導(dǎo)體特性的元素,為了提供鋰離子在硅電極材料中的擴(kuò)散速度,需要提高硅材料的導(dǎo)電性能,目前產(chǎn)業(yè)中所選擇的就是成熟的碳基材料。利用不同形態(tài)的碳基材料來對(duì)硅元素進(jìn)行復(fù)合做改性處理,使其構(gòu)成均勻的導(dǎo)電網(wǎng)絡(luò)結(jié)構(gòu),形成導(dǎo)電性好、附著性好、化學(xué)穩(wěn)定性高的硅碳負(fù)極材料。硅碳負(fù)極材料是以碳作為分散基體,硅作為活性物質(zhì)的新型負(fù)極材料。鋰電池...

史海拾趣

問答坊 | AI 解惑

AVR+DTMF來電記錄

本制作使用2X16的液晶(國內(nèi)型號(hào)叫1602B)??梢詫?34個(gè)來電存在EEPROM中,并可以通過電腦串行口在超級(jí)終端中讀取數(shù)據(jù)。MT8870 是電信信號(hào) DTMF 解碼器,在本電路中有兩個(gè)輸入:一個(gè)是電話線輸入,另一個(gè)是耳機(jī)輸入,可以接掃描儀、錄音機(jī)等設(shè)備。兩 ...…

查看全部問答∨

電源應(yīng)用中場(chǎng)效應(yīng)晶體管的崩潰效應(yīng)

前言:  在 SMPS(Switching Mode Power Supply) 以及 DC-DC 轉(zhuǎn)換器設(shè)計(jì)中 , 使用場(chǎng)效應(yīng)晶體管當(dāng)作切換開關(guān)已經(jīng)越來越普遍。在設(shè)計(jì)中為了減少尺寸大小和提升電源密度 , 其電源管理中操作工作頻率也要求越來越高。如此會(huì)造成較高的 di/dt 產(chǎn)生使得 ...…

查看全部問答∨

FSK編譯碼器設(shè)計(jì)

FSK即Frequency Shift Key,頻移鍵控編碼。通俗來說就是信號(hào)\'1\'用一個(gè)頻率來表現(xiàn),\'0\'用另外一個(gè)頻率來表示,如圖1所示。圖1      FSK編碼的基本思路是首先產(chǎn)生兩個(gè)頻率fone和ftwo,其中fone表示\'1\',其中ftwo表示\'0\' ...…

查看全部問答∨

郁悶! 發(fā)泄一下!

每周5天半! 每天工作12~13小時(shí)不算加班費(fèi),還不能說是加班,只能說是趕工! 工作到晚上12點(diǎn),1點(diǎn),2點(diǎn), 第二天依然必須9點(diǎn)上班, 否則算遲到! 只要一天不加班, 老板心里就不爽, 第二天就開始催進(jìn)度, 要縮短開發(fā)時(shí)間! 全年12個(gè)月工資, 無任何獎(jiǎng)金津貼 ...…

查看全部問答∨

213132321321

60H,61H,62H作里程計(jì)數(shù)單元,6CH,6DH作T1計(jì)數(shù)擴(kuò)充單元, ;       68H,69H,6AH,6BH存放自行車每圈時(shí)間數(shù),70H,71H,72H,73H ;       作顯示BCD碼存放數(shù)用,11H--15H存放被除數(shù),16H-19H存放除數(shù) ...…

查看全部問答∨

PIC16f877

誰有C語言寫的A/D轉(zhuǎn)換程序???讓我參考參考(PIC16F877) [ 本帖最后由 煙雨 于 2011-3-10 15:16 編輯 ]…

查看全部問答∨

急問

我寫的程序大了,超過了449的CODE范圍,出現(xiàn)了如下了編譯信息,該怎么辦呢? Error[Og008]: Code size limit exceeded (4096 code bytes) for this version of the compiler Error while running C/C++ compiler 請(qǐng)各位高手指點(diǎn)一下,多謝…

查看全部問答∨

摻雜濃度

三極管中集電極 基極 發(fā)射極的摻雜濃度怎么排序   我看教科書上說 從小到大 是基極 集電極 發(fā)射極   在本論壇上的某一教程帖中看到的是 從小到大 是集電極 基極 發(fā)射極   不知道哪個(gè)正確 [ 本帖最后由 eeboyok 于 2011-11-13 ...…

查看全部問答∨

msp430f149學(xué)習(xí)資料

難得的430學(xué)習(xí)資料。430系列單片機(jī),不同系列的片內(nèi)集成稍有不同,但是控制和使用方法差不多。我找到了一個(gè)好的中文資料,感覺很有用,拿來大家分享。…

查看全部問答∨

關(guān)于GSM模塊和單片機(jī)問題

我想確定一個(gè)問題,就是:是不是我把卡A放到GSM模塊中··然后程序里定義的手機(jī)號(hào)碼B··然后卡A發(fā)短信噶B呢? 一下是我?guī)讉€(gè)AT指令: unsigned   char    code   mode[]= \"AT+CMGF=1\\r \";   //& ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 清远市| 大厂| 宝兴县| 马关县| 额济纳旗| 潞西市| 华蓥市| 和田县| 页游| 含山县| 湘潭市| 宾阳县| 蓝田县| 东乡| 二手房| 赤城县| 阳泉市| 抚顺县| 台安县| 景谷| 玉树县| 浪卡子县| 哈巴河县| 黑水县| 洞口县| 成武县| 海兴县| 丰顺县| 天水市| 安新县| 崇明县| 阜康市| 县级市| 英吉沙县| 娄底市| 普定县| 肥乡县| 蒙自县| 三穗县| 凤山县| 菏泽市|