12m12mhz晶振波特率89C52单片机如何将波特率4800改成2400

AT89C52单片机12MHZ晶振产生38KHZ的方波用定时器T0方式2怎样编程_百度知道
AT89C52单片机12MHZ晶振产生38KHZ的方波用定时器T0方式2怎样编程
我有更好的答案
include&reg52.h&/使用定时器T0的模式2 TH0= TL0=0
/无限循环等待中断
} void zd(void) interrupt 0 {
包含52单片机寄存器定义的头文件 sbit P32=P3^2;/启动定时器T0
//**************************************************************函数功能:主函数**************************************************************/void main(void){ EA=1; ET0=1; TMOD=0x02;
采纳率:35%
具体可以参考datasheet的计算公式。void Timer2_init(void){ T2CON
&= 0xFD; T2MOD
|= 0X02; RCAP2H
= 0 RCAP2L
= 0x00应该用T2的频率发生器方式更好,初始化后就可以使用了。比如下面函数段
本回答被网友采纳
为您推荐:
其他类似问题
晶振的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机80C51 假设晶振频率为12Mhz,波特率为9600,计算定时器计数器工作方式2,SMOD=0,计算波特率的初值_百度知道
单片机80C51 假设晶振频率为12Mhz,波特率为9600,计算定时器计数器工作方式2,SMOD=0,计算波特率的初值
单片机80C51
假设晶振频率为12Mhz,波特率为9600,计算定时器计数器工作方式2,SMOD=0,计算波特率的初值
我有更好的答案
其实算波特率也是算定时器时间,9600就是1秒9600位,12M晶振内部分频后1M,你可以自己算下,用算定时器的方式去算这个波特率
采纳率:71%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机12M晶振串口用什么波特率最好_百度知道
单片机12M晶振串口用什么波特率最好
单片机12M晶振串口用什么波特率最好
我有更好的答案
传统上用的都不行尤其是4800
许多人一直认为其误差是0.16% 其实是7% 你自己可以算一下应该用1200
或者 24002400最好
采纳率:23%
8%的误差最好是用11.0592M的,这个频率可以选任意的一个波特率(都可以被1600整除),12M的晶振波特率只能是的情况下会有7,会产生乱码
最好用11.0592M晶振,通常都用2400的
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。单片机编程-博泰典藏网
典藏文档 篇篇精品
单片机编程
导读:某MCS-51单片机系统使用定时器/计数器T0监测某设备信号,设89C52单片机的晶振为11.0592MHz,单片机系统的晶振频率为12MHz,单片机晶振频率为11.0592MHz,对89C52单片机编写程序,设单片机的晶振为11.0592MHz,某单片机系统的晶振频率为12MHz,某89C52单片机的P1口接8个发光二极管,用单片机P0口输出段选码,某MCS-51单片机系统使用定时器/计数器编写程序,查找片内RAM的30H~50H单元中是否有55H这一数据,若有,则51H单元置为FFH;若未找到,则将51H单元清0。 MOV R0,#30H MOV R2,#21H MOV 51H,#0 LOOP: CJNE @R0,#0,NEXT MOV 51H,#0FFH LJMP OVER INC R0 DJNZ R2,LOOP OVER:
编写程序计算24H*03H=?,结果放21H中。 MOV
A,#24H MOV
B,#03H MUL
21H,A 编写程序把RAM的24H与23H中数据的高4位互换,结果放21H、22H中。 MOV A,23H MOV R0,#24H XCHD A,@R0 MOV
22H,24H 某MCS-51单片机系统使用定时器/计数器T0监测某设备信号,当设备出现故障时其信号为高电平,要求出现故障时,从P3.5引脚输出方波,产生频率为1000Hz的报警声音。设晶振频率为12MHz,不考虑T1。完成下列各问题: (1)怎样使用故障信号控制T0工作产生方波? (2)计算声音信号的周期、T0的定时时间、T0在定时时间内的计数值; (3)选T0以何种模式工作?TMOD赋何值? (4)计算T0初值; (5)编写主函数和T0中断服务函数,使T0以中断方式从P3. 5引脚产生报警声音方波。 (1)用外部门控制T0工作 (2)1ms,500μs,500 (3)模式2,TMOD=0X29 (4)65036 (5)C语言程序 #include
sbit P35=P3^5; 主函数: main() { TMOD=0x29;
EA=1, ET0=1;
} T0中断服务函数: void int_t0(void) interrupt 1 { TL0=12,
TH0=254; P35=~P35
设89C52单片机的晶振为11.0592MHz,串行口工作于方式3做数据收发,波特率为9600b/s。完成以下串行通信的初始化工作。 (1)写出T1以模式2定时作为波特率发生器的模式字; (2)计算T1的计数初值; (3)写出串行口控制寄存器的控制字; (4)写出初始化程序段(包括定时器和串行口)。 (1)TMOD=0x20 (2)0xfd (3)SCON=0xc0 (4)TMOD=0x20; TH1=0 TL1=0 TR1=1; SCON=0xc0;
单片机系统的晶振频率为12MHz,拟用T1定时中断产生频率为1000Hz的报警声音。试编写对T1的初始化程序段。已知T0以模式2作为计数器使用。 TMOD=0x26; TL1=12; TH1=254; EA=1;
ET1=1; TR1=1; 编写一函数to_asc,把传送给它的低半字节数据转换成ASCII码,并将其返回。 unsigned char to_asc(char d) {
d+=0x30; If(d>0x39) d+=7; }
编写函数,查找code区域中从0x0030开始的100个单元中出现0x55的次数,并将查找的结果从函数中返回。 unsigned char find(void) {
unsigned char i, dd=0; unsigned char code *p; I=100;
p=0x0030; while(i--) if(*(p++)==0x55) dd++;
使用89C52串行口以工作方式3进行串行通信,假定波特率为9600b/s,单片机晶振频率为11.0592MHz。请编写全双工通信程序,以中断方式接收和发送数据,并对数据进行奇偶校验。设发送的50个数据在片外数据区,地址从0x0010开始的区域,接收的数据保存0x80开始的区域,接收到’$’后表示结束。 #include unsigned char xdata *SendBuffer=0x0010; unsigned char xdata *RecvBuffer=0x0080; unsigned char i,j; bitSendOver,RecvO void main() {
TMOD=0x20;
SCON=0xc0;
ACC=SendBuffer[i++];
SBUF=ACC; while(1); } void Serial() interrupt 4 { if(TI)
ACC=SendBuffer[i++];
SBUF=ACC; if(i==50) SendOver=1;
ACC=SBUF; if(RB8==P)
{ RecvBuffer[j++]=ACC; if(ACC=='$') RecvOver=1;
片内RAM的30H、31H单元存放着两个无符号数,编写程序比较其大小,将其较大者存于30H中,较小者存于31H单元中 MOV A,30H CLR C SUBB A,31H JNC L1 MOV A,30H XCH A,31H MOV 30H,A L1: SJMP $
使用89C52串行口以工作方式3进行串行通信,假定波特率为4800b/s,单片机晶振频率为11.0592MHz。请编写全双工通信程序,以中断方式接收和发送数据,并对数据进行奇偶校验。设发送的50个数据在片外数据区,地址从0x0010开始的区域,接收的数据保存0x80开始的区域,接收到’S’后表示结束。 #include unsigned char xdata *SendBuffer=0x0010; unsigned char xdata *RecvBuffer=0x0080; unsigned char i,j; bitSendOver,RecvO void main() {
TMOD=0x20;
SCON=0xc0;
ACC=SendBuffer[i++];
SBUF=ACC; while(1); } void Serial() interrupt 4 { if(TI)
ACC=SendBuffer[i++];
SBUF=ACC; if(i==50) SendOver=1;
ACC=SBUF; if(RB8==P)
{ RecvBuffer[j++]=ACC; if(ACC=='$') RecvOver=1;
在一个fosc为12MHz的89C52系统中接有一片ADC0809,它的地址为7FFFH,试编写ADC0809初始化程序和定时采样通道2的程序(假设采样频率为1ms/次,每次采样4个数据)。 #include #include define DAC0809 XBYTE[0x7fff] unsigned char xdata buffer[4] _at_ 0xa0;
void main() { TMOD=0x01; TH0=0xFC; TL0=0x18; EA=1; ET0=1; TR0=1; DAC0809=2; while(1); } void time0_srv() interrupt 1 {
TH0=0xFC; TL0=0x18; for(i=0;i<4;i++) { DAC0809=2; delay(); buffer[i]=DAC0809; }
对89C52单片机编写程序,使串行口以方式1查询方式自收自发(接收和发送都需要查询),波特率为4800b/s。设单片机的晶振为11.0592MHz。 #include void main() {
TMOD=0x20;
SCON=0x50; while(1)
{ while(RI==0);
SBUF=c; while(TI==0);
编写一函数move_data,把程序存储器地址从0x30开始的20个字节数据,传送到片内RAM的数组array中。 unsigned char data array[20]; voidmove_data() { unsigned char code * pp=0x30; for(i=0;i<20;i++) array[i]=*(pp+i); }
编写程序计算24H,25H中的16位数乘以2,结果放21H,22H,23H中。 MOV A,24H CLR C RLC A MOV 21H,A MOV A,25H RLC A MOV 22H,A CLR A RLC A MOV 23H,A 某单片机系统的晶振频率为12MHz,使用T1定时230μs产生中断。试编写对T1的初始化程序段。已知T0以模式1作为定时器使用。 TMOD=0x21; TL1=26; TH1=26; EA=1;
ET1=1; TR1=1; 编写程序,查找片内RAM的30H~50H单元中出现0的次数,并将查找的结果存入51H单元。 MOV R0,#30H MOV 51H,#0 NEXT: CJNE @R0,#00H,NEXT2 INC 51H NEXT2: INC R0 CJNE R0,#51H,NEXT
对累加器A中的1、2、3位清0,其余位不变。 AND A,#0F8H
某单片机系统的晶振频率为12MHz,使用T0定时2.5ms产生中断。试编写对T0的初始化程序段。已知T1以模式1作为定时器使用。 TMOD=0x11; TL0=60; TH0=246; EA=1;
ET0=1; TR0=1;
片内RAM的30H和31H单元中存放着一个16位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。 CLR C MOV A,#0 SUBB A,31H MOV 31H,A MOV A,#0 SUBB A,30H MOV 30H,A 某89C52单片机的P1口接8个发光二极管,拟用T1定时中断,控制P1口每250ms输出一次做右移流水灯显示,电路如图所示。设晶振为6MHz,不考虑T0。完成下列各问题:(1)P1口各位输出高电平还是低电平发光二极管亮? (2)拟使T1定时多少ms、中断多少次使P1输出一次? (3)拟选T1以模式几定时?写出模式字TMOD的值; (4)计算T1的定时初值; (5)编写主函数和T1中断服务函数,实现流水灯功能。 (1)低电平发光二极管亮 (2)125ms;2次 (3)模式1,TMOD=0X11 (4)3036 (5)C语言程序 #include
unsigned char aa=0x80; 主函数: main() { TMOD=0x21; TL1=220,
P1=~ while(1);
} T1中断服务函数: void int_t1(void) interrupt 3 { TL0=220,
TH0=11; aa<<=1; P1=~ }
编写程序,把片内RAM中位地址07H位的数值,传送到ACC.0位。 MOV C,07H MOV ACC.0,C 编写一函数to_data,把传送给它的十六进制数的ASCII码转换成十六进制数,并将其返回。 unsigned char to_asc(char d) {
d-=0x30; If(d>9) d-=7; }
编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2)∨P1.3”的逻辑功能。 MOV C,P1.1 ANL C,P1.2 ORL C,P1.0 ORL C,P1.3 MOV P1.4,C
用单片机P0口输出段选码,Pl口输出位选码,写出数码管显示程序。 #include unsigned char code LED[]= {0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,
0x6f, 0x77, 0x7c,0x39,0x5e, 0x79, 0x71,0x40,0x00} unsigned char dispbuf[6]; voiddisp() {
for(i=0;i<6;i++) { P0=LED[dispbuf[i]]; P1=1<<i; delay() }}
某MCS-51单片机系统使用定时器/计数器T0定时,从P1.0 产生频率为100kHz等宽矩形波。假定单片机的晶振频率为12MHz,不考虑T1。完成下列 (1)计算方波周期和T0的定时时间; (2)计算T0在定时时间内的计数值; (3)应该选T0以何种模式工作最恰当?写出模式字TMOD的值; (4)计算T0的定时初值; (5)编写主函数和T0中断服务函数,使T0以中断方式从P1.0产生方波。 (1)10μs,5μs (2)5 (3)模式2,TMOD=0X22 (4)251 (5)C语言程序 #include
sbit P1_0=0x90; 主函数 main() { TMOD=0x22;
TL0=251, TH0=251;
EA=1, ET0=1;
while(1); }
T0中断服务函数: void int_t0(void) interrupt 1
{ P1_0=~P1_0; }
编写一函数,查找片外RAM区域中从0x0100开始编写一函数,对无符号字符型数组用冒泡法从小编写程序,查找片内RAM从20H到80H的存储器单 的200个单元中出现0xaa的次数,并将查找的结到大进行排序,函数的入口参数为拟排序的数组元中00H的个数。结果存入81H中。 利用定时器/计数器T1的模式2对外部信号进行果从函数中返回。 aa和数组的长度m。 MOV
R0,#20H 计数,编写初始化程序和中断函数,实现每计满unsigned char find(void) void sort(unsigned char aa, unsigned char m) MOV
R1,#61H 100次,对P1.0端取反产生方波信号。假设没有{
unsigned char data i, d=0; {
unsigned char I,j,n, MOV
81H,#00H 使用T0。 unsigned char xdata *p; for(i=0;i<m-1;i++) NEXT0: 因100<256故选模式2 i=200;
n=m-i-1; CJNE
@R0,#00H,NEXT1 (3)C语言程序: while(i--) for(j=0;j<n;j++) INC
81H #include
if(*(p++)==0xaa) {
if(aa[j]>aa[j+1]) NEXT1: sbit P10=P1^0; d++; {
tem=aa[j]; INC
R0 主函数:
aa[j]=aa[j+1]; DJNZ
R1,NEXT0 main() }
aa[j+1]= 使用MCS-51单片机系统的定时器/计数器T1定时{ TMOD=0x61; 单片机系统的晶振频率为6MHz,拟用T0定时中断}
中断,从P3.6和P3.7引脚分别输出周期为500μs TL1=156; TH1=156;
产生频率为500Hz的报警声音。试编写对T0的初某海洋资源勘测系统使用单片机T1计数控制探和1000μs的方波。设晶振频率为6MHz。完成下 EA=1; ET1=1;
始化程序段。已知T1以模式2作为串行口波特率头勘测深度,其中有一项目要求计数25000做T1列问题:
TR1=1; 发生器使用。 中断处理。试编写对T1的初始化程序段。已知T0(1)使用一个定时器怎样产生两种方波?
TMOD=0x21; 以模式1作为定时器使用。 (2)定时多少μs?定时器初值是什么?使用模} TL0=12; TMOD=0x51; 式几? T1中断服务函数: TH0=254; TL1=88; (3)编写主函数和T1中断服务函数,使P3.6和void int_t1(void) interrupt 3 EA=1;
ET0=1; TH1=158; P3.7引脚产生方波。(不考虑T0)。 { P10=~P10; }
ET1=1; (1)T1定时每次中断对P3.6引脚取反产生周期 设某MCS-51单片机系统的振荡频率为12MHz,编TR1=1;
为500μs的方波,每2次中断对P3.7引脚取反产 写程序,用定时器/计数器T0以模式1定时,中断方式在P1.0引脚产生周期为1000μs的方波。假设没有使用T0。 (1)定时时间为1000μs/2, 计数值为1000μs/2/机器周期=500,T0初值为65036 (2)C语言程序: #include
sbit P10=P1^0; 主函数: main() { TMOD=0x21;
TL0=12; TH0=254;
EA=1; ET0=1;
} T0中断服务函数: void int_t0(void) interrupt 1 { TL0=12;
TH0=254; P10=~P10;
使用单片机T0对生产线上的工件进行计数,每够255个令T0中断进行一项处理,试编写对T0的初始化程序段。已知T1以模式2作为串行口的波特率发生器使用。 TMOD=0x26; TL0=1; TH0=1; EA=1;
ET0=1; TR0=1;
设计一个2×2的行列式键盘(同在P1口)电路并编写键扫描程序。 #include unsigned char key() { unsigned char row,col=0,k =-1;
P1=0 if((P1&0xfc)==0xfc) return(k); delay20ms(); if((P1&0xfc)==0xfc) return(k); for(row=0;row<2;row++)
P1=~(1<<row);
k=P1&0 if(k!=0xfc)
{ while(k&(1<<(col+2))) col++;
P1=0 while(P1&0xfc!=0xfc);
试编写程序,统计片内RAM中从40H单元开始的20个单元中0的个数,结果存于R2中。 MOV R0,#40H MOV R7,#20 MOV R2,#0 LOOP: CJNE @R0,#0,NEXT INC
R2 NEXT: INC
R0 DJNZ R7,LOOP
片内RAM的30H单元内存放着一压缩的BCD码,编写程序,将其拆开并转换成两个ASCII码,分别存入31H和32H单元中,高位在31H中。 MOV R0,#30H MOV A,@R0 PUSH ACC SWAP A ANL A,#0FH ORL A,#30H INC R0 MOV @R0,A POP ACC ANL A,#0FH ORL A,#30H INC R0 MOV @R0,A SJMP $
设fsoc=11.059 2MHz,试编写一段程序,其功能为对串行口初始化,使之工作于方式1,波特率为1 200b/s;并用查询串行口状态的方法,读出接收缓冲区的数据并回送到发送缓冲区。 #include void main() {
SCON=0x50; while(1)
{ while(!RI);
SBUF=c; while(!TI);
编写程序计算36H+03H=?,结果放21H中。 MOV
A,#36H ADD
A,#03H MOV
21H,A 在数字滤波中有一种叫做“中值滤波”的技术,就是对采集的数据按照从大到小或者从小到大的顺序进行排序,然后取其中间位置的数作为采样值。试编写一函数,对存放在片内数据存储器中从0x50开始的21个单元的采样数据用冒泡法排序进行中值滤波,并把得到的中值数据返回。 unsigned
median-_filter() { unsigned char data
*point,i,j,n,d;
for(i=0;i<20;i++)
point = 0x50;
for(j=0;j<n;j++) {
if(*point<*(point+1))
*point=*(point+1);
*(point+1)=d; } point++; }
} point=0x50+10;
某MCS-51单片机系统使用定时器/计数器T1定时,产生频率为1000Hz的方波声音信号,要求方波信号从P3.5引脚输出。设fosc=6MHz,不考虑T0。完成下列各问题: (1)计算声音信号的周期和T0的定时时间; (2)计算T1在定时时间内的计数值; (3)应该选T1以何种模式工作最恰当?写出模式字TMOD的值; (4)计算T1的定时初值; (5)编写主函数和T1中断服务函数,使T1以中断方式从P3. 5引脚产生方波。 (1)1ms,500μs (2)250 (3)模式2,TMOD=0X25 (4)6 (5)C语言程序 #include
sbit P35=P3^5; 主函数: main() { TMOD=0x25;
TL1=6, TH1=6;
EA=1, ET1=1;
} T1中断服务函数: void int_t1(void) interrupt 3
{ P35=~P35; }
生周期为1000μs的方波。 (2)定时250μs;初值为131;使用模式2。 (3)C语言程序 #include
sbit P36=P3^6;
sbit P37=P3^7;
主函数: main() { TMOD=0x21; TL1=131; TH1=131;
EA=1; ET1=1;
TR1=1; while(1);
} T1中断服务函数: void int_t1(
某单片机系统的晶振频率为6MHz,使用T0定时100ms产生中断。试编写对T0的初始化程序段。已知T1以模式1作为计数器使用。 TMOD=0x51; TL0=176; TH0=60; EA=1;
ET0=1; TR0=1;
编写程序,40H加41H单元的数,结果送42H:43H
MOV R0,#40H MOV A,@R0 INC R0 ADD
A,@R0 MOV 43H,A CLR A ADDC A,#0 MOV 42H,A SJMP $
设89C52单片机的晶振为11.0592MHz,串行口工作于方式1做数据收发,波特率为4800b/s。完成以下串行通信的初始化工作。 (1)写出T1以模式2定时作为波特率发生器的模式字; (2)计算T1的计数初值; (3)写出串行口控制寄存器的控制字; (4)写出初始化程序段(包括定时器和串行口)。 (1)TMOD=0x20 (2)0xfa (3)SCON=0x50 (4)TMOD=0x20; TH1=0 TL1=0 TR1=1; SCON=0x50;
片内RAM中有两个4字节压缩的BCD码形式存放的十进制数,一个存放在30H~33H单元中,另一个存放在40H~43H单元中。编写程序将它们相加,结果的BCD码存放在30H~33H中。 CLR C MOV R0,#30H MOV R1,#40H MOV R2,#4 NEXT: MOV A,@R0 ADDC A,@R1 DA A MOV @R0,A INC R0 INC R1 DJNZ R2,NEXT
编写程序,实现(30H)×5+(31H)→(32H:33H) MOV A,30H MOV B,#5 MUL AB ADD A,31H MOV 33H,A CLR A ADDC A,B MOV 32H,A SJMP $
包含总结汇报、表格模板、行业论文、农林牧渔、计划方案、教学研究、自然科学、人文社科、党团工作、求职职场、外语学习以及单片机编程等内容。
相关内容搜索求助:我用STC89C52单片机和12MHZ晶振怎么产生9600的波特率_单片机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:144,769贴子:
求助:我用STC89C52单片机和12MHZ晶振怎么产生9600的波特率收藏
求哪位大神可以在这个基础上帮我改一下吗?
PCON = 0x80;
SCON = 0x50;
TMOD = 0x21;
TH0 = 0x00;
TL0 = 0x01;
SerDTvalid = FALSE;
开发宝-靠谱的电子产品研发众包平台!单片机,硬件,软件,逻辑,结构等电子领域专业外包服务,大众智慧快速帮您解决需求.
这段程序应该是用11.0592M的晶振正好产生9600的波特率,但是我只有12M的晶振没有办法啊
用12m的做串口有误差的,最好用11.0592的
估计产生不了,会出现错误数据的吧
换晶振。。。
更改波特率或更换晶振,12M可以设4800
12MHZ晶振产生9600波特率,定时器值是是小数,但是勉强是可以用的,只是经常会出现乱码。如果用11.0592MHZ的晶振产生9600波特率,定时器值就是整数,误差就可以忽略不计了。所以为了能够产生9600的波特率,人们经常用11.0592MHZ的晶振。
登录百度帐号推荐应用

我要回帖

更多关于 12m晶振波特率 的文章

 

随机推荐