本帖最后由 Kxuan163 于 2020-12-18 20:24 編輯
【第1題】
已知51單片機串行通信口在串口方式1,波特率為9600bps,
系統晶振頻率為11.0592MHZ,求TL1和TH1中裝入的數值是多少?
【答】:
方式1是16位計數器, 2^16=65536d
當SMOD取0,波特率=F/[32x12x(65536-N)],
預裝值N=256-F/(波特率x32x12)=65536-11059200/(9600x32x12)=65533d=FFFDh
TH1←0FFh, TL1←0FDh
=======================================
【第2題】
已知51單片機使用晶振為11.0592MHZ,用T1的工作方式2作波特率發生器,
串口通信的波特率為9600bps,要求:
1.寫出T1定時器的初值計算過程,
2.寫出程序。
【答】:
1.T1定時器的初值計算:
方式2是8位計數器,
波特率=(2的SMOD次方x F)/(32x12x(256-N),
SMOD取0(波特率不倍增),
N是置入定時器TH1的時間常數初值,F是晶振頻率,
當SMOD取0,波特率=F/(32x12x(256-N)),
計數初裝值N=256-F/(波特率x32x12)=256-11059200/(9600x32x12)=253d=0FDh
2.匯編語言源程序:
INIT: MOV TMOD,#20H ;定時器T1工作方式2
MOV TH1,#0FDH ;置入時間常數
MOV TL1,#0FDH
SETB TR1 ;啟動T1
MOV PCON,#00H ;SMOD=0,波特率不倍增
MOV SCON, #50H ;串行口工作方式1
=======================================
【第3題】
有a、b兩臺51單片機,使用晶振不相同,Fa=11.0592MHz,Fb=12MHz,
a與b用T1方式2作串行通信,波特率為2400bps,a,b各自的初裝值是多少?
答:
方式2是8位計數器,
SMOD取0(波特率不倍增),波特率=F/(32x12x(256-N)),
計數初裝值N=256-F/(波特率x32x12)
a的計數初裝值Na=256-11059200/(2400x32x12)≈244d=0F4h
b的計數初裝值Nb=256-12000000/(2400x32x12)≈243d=0F3h
=======================================
【第4題】
80C51串行口使用定時器T1作波特率發生器,工作方式2即( )方式。
假定晶振頻率為12MHZ,則可設定的波特率范圍為( )~( ),為什么?
【答】:
方式2即(8位計數器,最大值=2的8次方=256),
可設定的波特率范圍為(122bps)~(62500bps),理由如下:
波特率=(2的SMOD次方x F)/(32x12x(256-N),
F=12000000Hz是晶振頻率,N是8位計數器TH1,TL1的初裝值,
SMOD是特殊功能寄存器PCON的第7位,取1或0(波特率倍增、或不倍增),
當SMOD=0,N=0, 波特率=(1x12000000)/(32x12x(256-0)=122bps
當SMOD=1,N=255, 波特率=(2x12000000)/(32x12x(256-255)=62500bps
.
補充知識:
顧及單片機與PC機串行通信, 常用波特率見下表:
晶振頻率 SMOD1 TH1=TL1初裝值 波特率(取整數)
--------------------------------------------------
12MHZ 0 204d即CCh 600bps
12MHZ 1 204d即CCh 1200bps
12MHZ 0 243即F3h 2400bps
12MHZ 1 243即F3h 4800bps
|