www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]使用GPRS模塊,模塊固定波特率115200, 手頭有現(xiàn)成的STC89c51RC,一般51不能達到115200,查找資料使用下面的配置可以實現(xiàn)115200的波特率, 已經(jīng)測試過OK。//#include "reg51.h"#include "intrins.h"#include "STC89C

使用GPRS模塊,模塊固定波特率115200, 手頭有現(xiàn)成的STC89c51RC,一般51不能達到115200,查找資料使用下面的配置可以實現(xiàn)115200的波特率, 已經(jīng)測試過OK。


//#include "reg51.h"
#include "intrins.h"
#include "STC89C5xRC.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

#define FOSC 18432000L //System frequency
#define BAUD 9600 //UART baudrate

/*Define UART parity mode*/
#define NONE_PARITY 0 //None parity
#define ODD_PARITY 1 //Odd parity
#define EVEN_PARITY 2 //Even parity
#define MARK_PARITY 3 //Mark parity
#define SPACE_PARITY 4 //Space parity

#define PARITYBIT EVEN_PARITY //Testing even parity

sbit bit9 = P2^2; //P2.2 show UART data bit9
bit busy;

void SendData(BYTE dat);
void SendString(char *s);


void init()//串口初始化
{
SCON=0x50; //SCON:串行口工作方式1, 8-bit UART,允許串行接收位(REN=1)
TL2=RCAP2L=250;//或253
TH2=RCAP2H=255;
T2CON=0x34;//

EA=1; //開總中斷
ES=1; //開串口中斷

}

void main()
{
/*
#if (PARITYBIT == NONE_PARITY)
SCON = 0x50; //8-bit variable UART
#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY)
SCON = 0xda; //9-bit variable UART, parity bit initial to 1
#elif (PARITYBIT == SPACE_PARITY)
SCON = 0xd2; //9-bit variable UART, parity bit initial to 0
#endif

TMOD = 0x20; //Set Timer1 as 8-bit auto reload mode
TH1 = TL1 = -(FOSC/12/32/BAUD); //Set auto-reload vaule
TR1 = 1; //Timer1 start run
ES = 1; //Enable UART interrupt
EA = 1; //Open master interrupt switch
*/

init();
SendString("STC89-90xxrnUart Test !rn");
while(1);
}

/*----------------------------
UART interrupt service routine
----------------------------*/
void Uart_Isr() interrupt 4 using 1
{
if (RI)
{
RI = 0; //Clear receive interrupt flag
P0 = SBUF; //P0 show UART data
bit9 = RB8; //P2.2 show parity bit
}
if (TI)
{
TI = 0; //Clear transmit interrupt flag
busy = 0; //Clear transmit busy flag
}
}

/*----------------------------
Send a byte data to UART
Input: dat (data to be sent)
Output:None
----------------------------*/
void SendData(BYTE dat)
{
while (busy); //Wait for the completion of the previous data is sent
ACC = dat; //Calculate the even parity bit P (PSW.0)
if (P) //Set the parity bit according to P
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 0; //Set parity bit to 0
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 1; //Set parity bit to 1
#endif
}
else
{
#if (PARITYBIT == ODD_PARITY)
TB8 = 1; //Set parity bit to 1
#elif (PARITYBIT == EVEN_PARITY)
TB8 = 0; //Set parity bit to 0
#endif
}
busy = 1;
SBUF = ACC; //Send data to UART buffer
}

/*----------------------------
Send a string to UART
Input: s (address of string)
Output:None
----------------------------*/
void SendString(char *s)
{
while (*s) //Check the end of the string
{
SendData(*s++); //Send current char and increment string ptr
}
}

================================================
STC89C5xRC.h

/* After is STC additional SFR */

/* sfr AUXR = 0x8e; */
/* sfr AUXR1 = 0xa2; */
/* sfr IPH = 0xb7; */

sfr P4 = 0xe8;
sbit P43 = P4^3;
sbit P42 = P4^2;
sbit P41 = P4^1;
sbit P40 = P4^0;

sfr XICON = 0xc0;

sfr WDT_CONTR = 0xe1;

sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;

/* Above is STC additional SFR */

/*--------------------------------------------------------------------------
REG51F.H

Header file for 8xC31/51, 80C51Fx, 80C51Rx+
Copyright (c) 1988-1999 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.

Modification according to DataSheet from April 1999
- SFR's AUXR and AUXR1 added for 80C51Rx+ derivatives
--------------------------------------------------------------------------*/

/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;

/* 80C51Fx/Rx Extensions */
sfr AUXR = 0x8E;
sfr AUXR1 = 0xA2;
sfr SADDR = 0xA9;
sfr IPH = 0xB7;
sfr SADEN = 0xB9;
sfr T2CON = 0xC8;
sfr T2MOD = 0xC9;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;

/* PCA SFR
sfr CCON = 0xD8;
sfr CMOD = 0xD9;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sfr CCAPM2 = 0xDC;
sfr CCAPM3 = 0xDD;
sfr CCAPM4 = 0xDE;
sfr CL = 0xE9;
sfr CCAP0L = 0xEA;
sfr CCAP1L = 0xEB;
sfr CCAP2L = 0xEC;
sfr CCAP3L = 0xED;
sfr CCAP4L = 0xEE;
sfr CH = 0xF9;
sfr CCAP0H = 0xFA;
sfr CCAP1H = 0xFB;
sfr CCAP2H = 0xFC;
sfr CCAP3H = 0xFD;
sfr CCAP4H = 0xFE;
*/

/* BIT Registers */
/* PSW */
sbit CY = PSW^7;
sbit AC = PSW^6;
sbit F0 = PSW^5;
sbit RS1 = PSW^4;
sbit RS0 = PSW^3;
sbit OV = PSW^2;
sbit P = PSW^0;

/* TCON */
sbit TF1 = TCON^7;
sbit TR1 = TCON^6;
sbit TF0 = TCON^5;
sbit TR0 = TCON^4;
sbit IE1 = TCON^3;
sbit IT1 = TCON^2;
sbit IE0 = TCON^1;
sbit IT0 = TCON^0;

/* IE */
sbit EA = IE^7;
sbit EC = IE^6;
sbit ET2 = IE^5;
sbit ES = IE^4;
sbit ET1 = IE^3;
sbit EX1 = IE^2;
sbit ET0 = IE^1;
sbit EX0 = IE^0;

/* IP */
/* sbit PPC = IP^6;*/
sbit PT2 = IP^5;
sbit PS = IP^4;
sbit PT1 = IP^3;
sbit PX1 = IP^2;
sbit PT0 = IP^1;
sbit PX0 = IP^0;

/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;

/* SCON */
sbit SM0 = SCON^7; // alternatively "FE"
sbit FE = SCON^7;
sbit SM1 = SCON^6;
sbit SM2 = SCON^5;
sbit REN = SCON^4;
sbit TB8 = SCON^3;
sbit RB8 = SCON^2;
sbit TI = SCON^1;
sbit RI = SCON^0;

/* P1 */
/* PCA
sbit CEX4 = P1^7;
sbit CEX3 = P1^6;
sbit CEX2 = P1^5;
sbit CEX1 = P1^4;
sbit CEX0 = P1^3;
sbit ECI = P1^2;
*/

sbit T2EX = P1^1;
sbit T2 = P1^0;

/* T2CON */
sbit TF2 = T2CON^7;
sbit EXF2 = T2CON^6;
sbit RCLK = T2CON^5;
sbit TCLK = T2CON^4;
sbit EXEN2 = T2CON^3;
sbit TR2 = T2CON^2;
sbit C_T2 = T2CON^1;
sbit CP_RL2= T2CON^0;

/* CCON */
/* PCA
sbit CF = CCON^7;
sbit CR = CCON^6;

sbit CCF4 = CCON^4;
sbit CCF3 = CCON^3;
sbit CCF2 = CCON^2;
sbit CCF1 = CCON^1;
sbit CCF0 = CCON^0;
*/
================================================
http://www.amobbs.com/thread-4534583-1-1.html


STC的URAT在6T模式下工作的問題

測試程序使用小強開發(fā)板光盤中的《串口收發(fā) 測試程序[深圳偉嵌科技].C》修改,主要是定時器,使用了定時器2作為波特率發(fā)生器。
晶振:11.0592M
通過計算可得知
當(dāng) TL2=RCAP2L=250; 時
12T模式下波特率57600,6T模式下波特率115200。
當(dāng) TL2=RCAP2L=253; 時
12T模式下波特率115200。

使用STC-ISP中的串口調(diào)試助手分別測試三種模式
A:6T,TL2=250,波特率115200
B:12T,TL2=250,波特率57600
C:12T,TL2=253,波特率115200

void init()//串口初始化
{
SCON=0x50; //SCON:串行口工作方式1, 8-bit UART,允許串行接收位(REN=1)
TL2=RCAP2L=250;//或253
TH2=RCAP2H=255;
T2CON=0x34;//

EA=1; //開總中斷
ES=1; //開串口中斷

}

測試結(jié)果:
A:會丟失第n*3個字符(n為自然數(shù))
B、C正常,自動發(fā)送一千多個字符,一個不落收到
從整個程序分析,流程是串口初始化并延時1ms,進入死循環(huán)等待中斷。
接收中斷發(fā)送后,清中斷標(biāo)志,把串口SBUF復(fù)制給P0口和中間變量a,把a放入receive數(shù)組,再把receive數(shù)組的內(nèi)容逐個送到SBUF讓串口發(fā)送,很簡單很直接,應(yīng)該沒有問題。
又測試了6T,TL2=244,波特率57600的模式,丟第n*5個字符。
所以,應(yīng)該是STC的串口在6T模式下不能可靠工作,或者不能與其它器件很好地配合。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

晶振,全稱石英晶體振蕩器,是一種電子元件,用于產(chǎn)生精確的時鐘信號。在現(xiàn)代電子設(shè)備中,晶振就像心臟一樣,為設(shè)備提供穩(wěn)定的節(jié)拍。

關(guān)鍵字: 晶振 電路板

無源晶振不需要外部電源供電,但要產(chǎn)生振蕩,通常需要與一個外部的振蕩器電路配合,而這個電路需要供電。有源晶振需要外部電源供電驅(qū)動振蕩器電路。有源晶振是由晶體和一個內(nèi)部的放大器電路組成的,這個放大器電路需要外部供電來驅(qū)動,使...

關(guān)鍵字: 無源晶振 晶振

在現(xiàn)代電子設(shè)備中,晶振作為提供精確時鐘信號的核心元件,其重要性不言而喻。從智能手機、計算機到汽車電子、通信基站,晶振的身影無處不在,它如同電子設(shè)備的 “心臟起搏器”,確保各種復(fù)雜電路有條不紊地運行。而晶振的核心 —— 石...

關(guān)鍵字: 晶振 時鐘信號 振蕩器

在當(dāng)今數(shù)字化時代,5G 通信技術(shù)以前所未有的速度改變著我們的生活,從高速的數(shù)據(jù)傳輸?shù)綄崟r的物聯(lián)網(wǎng)應(yīng)用,5G 的影響力無處不在。然而,在這一系列令人矚目的技術(shù)背后,有一個常常被忽視卻至關(guān)重要的角色 —— 晶振。它如同幕后的...

關(guān)鍵字: 通信 數(shù)據(jù)傳輸 晶振

未來,隨著 5G、物聯(lián)網(wǎng)、人工智能等技術(shù)的發(fā)展,可編程波特率產(chǎn)生器將面臨更高的性能要求和更復(fù)雜的應(yīng)用場景。通過不斷創(chuàng)新和技術(shù)進步,可編程波特率產(chǎn)生器將在更廣泛的領(lǐng)域發(fā)揮重要作用,推動數(shù)字通信技術(shù)的發(fā)展和應(yīng)用。

關(guān)鍵字: 波特率

在電子電路領(lǐng)域,晶振作為產(chǎn)生穩(wěn)定時鐘信號的核心元件,廣泛應(yīng)用于各類電子產(chǎn)品中,從手機、電腦到智能家居設(shè)備,其穩(wěn)定的頻率輸出是整個系統(tǒng)正常運行的基礎(chǔ)。而在晶振電路中,反饋電阻與限流電阻雖然看似不起眼,卻發(fā)揮著不可或缺的作用...

關(guān)鍵字: 晶振 反饋電阻 限流電阻

晶振是電子電路中最常用的電子元件之一,一般用字母“X”、“G”或“Z”表示,單位為Hz。為增進大家對晶振的認識,本文將對保證晶振的頻率穩(wěn)定性的方法以及四腳無源晶振與四腳有源晶振的區(qū)別予以介紹。如果你對晶振具有興趣,不妨繼...

關(guān)鍵字: 晶振 指數(shù) 無源晶振 有源晶振

為增進大家對晶振的認識,本文將對溫度對晶振頻率的影響以及使用晶振時需要注意的事項予以介紹。

關(guān)鍵字: 晶振 指數(shù) 晶體振蕩器

為增進大家對晶振的認識,本文將對晶振以及晶振標(biāo)稱頻率予以介紹。

關(guān)鍵字: 晶振 指數(shù) 標(biāo)稱頻率
關(guān)閉