51单片机C语言编程基础及实例
基础知:识15 片机编单基础 程一节第:单码管按键数示显第 二:节数双码可管调表 秒三第:十字节路交口灯 通第节四:码管数驱动 五第节:盘驱键动第六节: 低频率频计 第节:电子表七第八 节:串口应用行
基础
知:51识 片单机程基编 础片单的外部机构结
1: DIP.40 双列直; 2.插P ,P1,P2,03 P四 8个位 准双 I向O/ 脚;引(为作I/O 输入,时先输要高电出平)3 电源 V.C(CIN4P)和地线 0NG(PDI20); N.4高电 复平位RESE T(IPN9;)10(uF电容 接VC 与CR EES,T即可实现上电复位) . 内5振荡电置,外路部要只接体晶 X至1(PI18)N 和0(PXIN9);1(率为主频的 频2 倍) 1. 程序6配 E置AP(N31I接)电高 V平CC(;运行单片机部 R内OM中 程序的) 7 .P 支3持二功能第RXD、TXD、:NT0、INTI1、T、0T1单片机内 部IO 部/件(:为学习单片机所,际实上是就程编控以下制 IO /部件,成完定任指) 1务.四个 8位 用通I /O端 口对,引脚应P 0、P、1P2 P和3 ;.2 个 两1 6位定计数时;器(MOD,TCON,TL0T,H0T,L1T,T1) 3H .一串行通个信接口(S;CN,OSBF) 4U.一个 断控中制;器IE(,PI) 针 AT对89C52单片 机头,文件 AT9x85.h 2出给了S F R殊特功寄存能器有端口所定义的。 语言C编基程础 1. 十六:制表示进节 0x字5:a进制二为0 011010B;0x61 E为 1100110。1 2 如.将一个果 1 位二进6赋给数一 个 位8的节变量字,则动截断为低 8 位,而丢掉自 8高 。位 . +3+ar 表v对示变量 av r增一先va;r—表示对变后量减。一4. x | 0=x0;表示f为x =x| 0x0f ;5. MOT =D (MODT & 0xf 0 ) 0x0|;5示表变量 T给OMD的低四位 赋 值x0,而不5变 TMOD 改高的 位四。6 . While(1 ; )示表限执行该无语,句死即环。循语句的分后表号空示循环体,就是{;}也
在某引脚输出高电平
的程方法编(比: 如P13.P(N4I)引脚
)
码代 1 .incl#dueh// 该文档头有中单片内部资机源符号的化定义其中包含 P1,3
.2.
v odi ami(nvoi d) 位入 口 3 .{ 4 .1P3 _= ;1 .5 Whiel 1 (;) 6. }
/
/vido 表没有示输入参数,也有没数函值,这入单片返机运的行
复
/给/P 13_ 赋 1,值引 P1.脚 就3输出高电平 V能CC//死循环, 相 L当OO: goPtoL OO;
P意注P: 0的个每引脚输要出电高平,时须外必上接拉阻(电 4如7)K至V CC 源。电 某在脚输出低引电平的程方编:(比法如 P2. 7脚引
代) 码1. inc#lde u// 该头文中有档片单机部资内源符号的定化,其中义包含 2.7P
.2 vido mani( void) 位入 3口 {. . 4P2_7 = ;05. W ihl( 1 e; 6).}
/v/io d示没有输表参入,数也有函没返值,这入数单机片行的复运
/
给 /P27 赋_值0 ,脚 P引27.就能 出输电平低 GDN//死 环循,当 L相OP: gOot oLOOP
在某;脚输引出波方编方程法(:如比 3P1.引脚 )代码1. # i
nclud h //头该档中有文单片机部内资的符源化定义,号中其包含P3.1
.2vo d imina (vodi )位入口 3.{ 4 .Whiel( 1) 5 .{
//ovd i示没表有入参输,数也有没数返值,函这入单机片行运的
//复零表示非,如果为真则真执行面下循体环的句
语
. 6P31 _= 1 ;7 .8 }.9. }P _3 1= 0;
/
给/P3 1_赋 值1, 引 P3.脚 就能1出高电平输 CV /C给 P3_/ 1值赋 ,0引脚P3. 1 就输能低出平电G N
D
//由于一直真,所为不以输出高断低、高、低、……,而形成从方
波将某脚引的输入电平取反,后从一个另脚引输:出 比( 如P04 =. ON( T1P.)1) 代码 1 . #niludc h//该 文档中头有片机单内部源资符的化号义,定中其含包P0 4 . 和1P1. 2 voi. maidn v(iod) 位 口 3. 入 4. P{_1 1= 1 5;. hWile(1 ) 6 {.7 .if( P11 _== 1 ). 98 .10.1 1. 12. 13} .}{ P 04 _=0 e;le s/读/ P取11. ,就认为 P1.是 1输入为 ,果 如P.1 输1高入平电 CCV //} 给P04 赋值_ 0,引 P脚.04就 输能低出电平G ND /初/始化。1.P 作为输入1,必须输出电高平 //零表非示真如果为,则执行真面循下体的语句 环/v/id 表o示没有入输参数,没也函有数返值,入单片机这行的运复
/
否/ P则.1 输入为低1平电G D }N/ 给/ 0P_4赋值 ,引脚0P0.4 就输出低能电 G平ND }// 给 P0_4 赋值1, 引 脚0P4.就 能输出高平 电VC
C// {P_04= 0 ; P{0_ = 14;
/
由/一直于真,所为以断不根 P1据1 .输的情入,改况变P .04 的出电输平
某端口 8将个 引脚输入电,平四低位反取,从后另一端个口8 个引 脚出输(: 比 P如 2=N TO( P )3)
代 码 . #i1nclde . /该头/文档有中单片机部资源内的号化符义定, 其包中 P含 和 2 3 P2. ovi mdian( voi d )入位 3.口{ .4 P 3= 0fxf;电平 5 . hWlie 1( 6) { //.非零示真,如表果为真则行执下循面环体语的 //句初化。P始 作为输3入,必须出高输平电同,时 P给3口的 8 个 脚引出高 输//vid o表示没输入有数,也参没函数有返值,入单这片机运的复
行/取反的方法/异是或 ,1而取不的方反则是法异或0
7 P2. =P30^x0f/ 读/取P ,3是就认为P 3为输 ,低四入异或者 位,即1反取,后然出输
8
}.9 . }
//由一直为真,于以所断不 P3将取反输 到 出2
P注
意:一个字的节 位 D87D6 、至D ,0分输别到 P出.3、7P3. 6 至P3.,比0如 P3=0x0f则 P3,7、.3P.6 P3、.、53.4P四 引个都输出低电平脚,而P .33、3.2、PP3.、1P3.0四个引脚 都输出电平。同样高,输入一 个口端 P,2是将即P .2、72P6. P2.至0读,入到个一字节的8 位 D7、D6 至0。D
共9 : 页一上页 [1]2[3 ]4[] [5] 6][[ 7 [8]] [] 9一下页第 节:一数单管码键显按 示片机单小最系的统件原硬接理图:线
.1 电源:接VC(CPIN0)4G、DN(PI2N)。加接0退电耦容0 .uF1 . 2晶接:X体1PI(N8)1、X(2IP1N9)注意标出。
晶体频率选用(1 2HzM,)有还助辅电 容30pF 3.接 复:R位ESPIN()9。接电复位电上,路以及手动位电路复,析分复工作位理原 .4 接置配EA:(IP31)。N说原明因。 光发极二的制控单:机片 /OI 出 将一输光二发管 L极E D正极 (的极阳)接 P.1,1L D E负的 (阴极)极接地 GND 。 只要 1P. 输出1高平 V电CC ,ELD就正向 通(导通时 L导ED上的 压降大 1V于),电有流流过L E,至发 DELD发亮 实际。由于上P1 1 .电平高出电阻为输1 K0起,输出到流的作限用所,流以 L过DE的电流小于 (V51-)V10/ K= .0mA4。要 只1P.1输出低 电 平NDG实际小于,0.3 VL,ED 就能导通,结不 LED 果亮。不
关开键的双入:输输入输出先高 个按一 键KY_OEN接在 P .1 6 与GN 之D间另,个一按 键KE_OFY 接 FP.1 与 GND 之7间按,KEY_ON 后 EDL ,亮 K按EYO_F F 后LDE灭 。同时下按L DE 亮半,LE 保持D松开键后状态,即 的NO 亮 OF 灭。F
代码
1. #iclnue dat. 2d#efin eEDL P^11 /用符/号 LED代 替 1_1P //用符号KEY_ NO代 替1_6 P//用符 号KYE_FFO代 替 1_7P /单片/机位后的执行入复口v,oi 表示d,无空输参入数无,返
3回 #.efdienK Y_EO NP16^ .4# efdnei KY_EFFOP1^7 5. ovd imin(av od i) 值 . { 7. KEY6O_ N= 1
;//为作入,输先首出高,输接 下KEYON,_1.P 6则地接 0,为否输入则 为
18 .EYK_OFF 1=; 1 9.为 Wihl( 1e )1 0. {1. 12.
1/作为输/入,首先出输高,接 K下YEO_F,PF17 则接.地 0,否则为入输
/永/远真,所以永为远循环执行下如括号内有语所句
if( KYEON=_0 )= LE=D1 /;/是 KY_EON接 下,示 所P1.1输 出,高ELD亮 if (EYKOF_F== 0 )LDE=; /0是/K E_YOFF 接,下示 所P1.1输 出低L,ED
1灭3.} /松开键/,都后不 给LD E值赋所, 以EDL 持最保按键状后态 14。./ /时按下时,L同DE 不亮灭,断占各半一间,交时频率很快替由,于眼惯性,看上去为半人亮 态51.}
数管的码法和接驱动理 原一支七数段管实码由际8 个 发二极管光构成其中,7 个组形成数字 8 的构七段笔画所,以称七为段码 数,管余下而 1 的发光二极个作管小数为。点作为习,分别给惯 8 发光二极管标上记个号a,:b,c,,edf,,gh,。对 应8 顶上一的画,顺按针方向时,中排间画一为g,小 点为数 h。 我通常又们将各极与二一字个节的8 位应,对a(D0,)b(1)D,c(2)D,(d3D,)eD(4,)(D5),g(f6),h(D7),D应 相 8发光个极二正管与好单机片一个端口 n 的 8 P引脚个连接 这,单样机片可就以通过脚引输出高电低平控制8 个发光 极二亮与灭,的从显示而种数字各符号;和对应字节引,接法脚:a(为Pn0.,)b(Pn.),1(Pc.n)2 ,(Pd.n3,e)Pn(4.,)f(Pn5),g(P..n)6h(,n.7)。 P果如 8将 个发光二极管的极负(极)阴接在内一起,作数码管的一个为脚引,种数这码则被管称为共阴 码数管共同
,的引则脚称为共阴极8 ,个极正则段为极。则否,果是如正将极阳(极)内接一在引出起的 则,为称共阳数码,管同的引共则脚为称阳极,共 个负8极为段则极。以 支单共数阴码为例,管可段极接将某端口 到P,共阴极n接GND, 可则写编出应对十六进制的码七
段
码字表数节如右据:图
1
6 键码显示程序的 们我在P1 端接一支口阴共数码管S ED,在L P2P3 、口接端16 个按键 ,分编号为别K YE_0、KEY1_ 到 EK_Y,操作时只F能按个一,键键后 按LED S示显应对编号键 代。 1码. #nicudle h2. # edifenS LE D1P3. # dfieneK YE0_ P^2 0. #4dfieen EYK_1P2 1 5. #def^ienK E_Y 22^2 P. 6d#feienKEY _ 3P23 ^.7# dfineeKE Y_ 42^4P 8 .#dfeien EKY_ P255^ . #defi9n eEKY_ 62^6P 1. #defi0n eEK_7YP2 ^71 1. defin# KeYE_ 83^P 102.#de fine EK_9 Y3^P11 .3#define K Y_A P3^2E 1. 4de#inf KEYeB_ P^3315. def#in eKE_CYP3^4 1. #6efdienK YED_P 35 1^.7 d#efienK Y_EEP 36^
1. #de8fnie EYK_F P3^ 791.C do uenignse cdahr eS7Cgde[o6]= 1/用/十进数作为六组下标数 ,可接取得直应的对 七编码段字 20节 /./ 0 1C 2 Ed 3F 4 5 7 689 A
b
21 .{0xf3 ,0x06 ,0x5b,0x 4f 0x,66 ,0xd6,0 7d, 0xx70, x0f,7 x60f ,x07 7 0x,c7, 0x39, 0x5e ,x79,0 x71}; 22. void0 ainm v(io d)23 . { 2. un4sgiednc hrai=0; / /作数组下标 2为5.P2 = 0fxf /;/2 P为输作,初始入化出输高26 .3P= 0xf;f// 3P作 为入输,初始输化出 高7.2W hiel ( 1)2 .8 2{.9 3. 31. 03.2 3. 33. 45. 33. 67. 338. }3 9.} 共 9页: 一上页 1[ 2 [3] []]4[ ]5 []6[ 7 []8 [9] 下]一页第 二:双节码数可管秒表 调:解要满只足题目要,求方法简单越越。好于由片机单 IO /资源够,所以双数足码可接管成静态显方式,示 两共阴个码数管分别在 接P1(秒十位) 和P2(个秒位),口它们的阴共都极地接,安两个按键接在排P3. 2 (十位调数整)和P 33(个位.调整)数上为了方便计时,选用, 2MH1z 晶体的。为了到达精计时确选, 定时用方式器2, 计数 250 每重载次,一即250u ,定s一整数变义计量重载次数,这数计数样40 00 即次 为一秒定义。两个节变量 字10 和SS 1分计别秒算位十和秒位个编。如下程得: 代序码if( EYK_ == 00 )i= ;0 if( EKY2 _==0 i)2=;i f (KE_Y4 == 0) i=; i4f KE(_6 Y= 0=) i= 6;i (fK YE_8== 0 )i 8= i;(f EKY_ ==A 0) i =0x;A if KEY(C_== 0 ) i=0 xC if;(KEY E ==_ 0 i)0xE=;i ( fKYE1 _==0 )i=;1 if K(EY_ 3= 0 = i=)3 if;( KE_5 ==Y0 ) i= ;5 fi( EK_Y 7==0 ) i=7 i;( KfY_E 9= 0= ) i9;= fi KE(_B =Y 0= )i 0x=B if; K(E_DY== 0 )i=0D;x fi( EK_Y F==0 )=0ix;
FLESD= Se7Cgoed i[] ;/开始时显示/ 0,根据i 取应 段编码七
1
. i#clnue da.C doeu nsgnidech raS g7eoCed[6]=1 //十用六进作数为组数下,可直接取标得应的 对七段编字码节3 ./ /0 C 1 2 E d 3 4F5 6 7 89 A
4.b{0x3f, 0 x06 ,0xb5, 0xf4 ,06x, 066xd,0x7 d,0x 70 0x7f,,0x 6, fx077, 0xc7,0x3 9, 0xe, 0x759,
0x71} ;.5 oid mavn( viodi) 6 . {.7 usngied int nu2s50= 0 ; 8 .usngind ehacr 1s 0=0; 9. nusgied nhac r1s = ; 01. uns0ingde car hey1k0= ;0 //记忆键按状,态为1 按下 11. u sngnei cdahr key1= 0 ;12./ 初始/化定器时 Tmie0r1 3 TMO.D =( TOMD& 0xF0 | 0)0x2 14.;T 1 H= -20; 5/对于 8 位二进数/说来, 250=6,-也 是就加 205 次1 时为25 , 6为即 150 T.1 = 1;R 1.6wh ile(1) {1. 718 .19 .0.2 //----------循环 1 //忆记按键态状, 为 按下
1P1
= Sg7eoCed[s10 ] ;/显示秒/十 位P2 =eSgC7deo [s1 ]; //显秒示个位 wilh( e )1{ //计时理 /处---/-------循 2
环21 if( .TF ==01 ) {2 .2 3.22 . 24.526 .2. 27. TF0 = 08 i;f(++us250 >= 40 0 0{ us)520= 0 ;f( +is1 >+=10 { )s = 1;0 fi(++ s01> 6 ) =1s 0=0;
}
2. 390.31 .32. 33. 34 . }
bre}ak /;/结束“环循 2,”改显示
修/
按十位/键理 处3P. = 21; //3P2 .为作入输先要输出高,平
if电(k y1e0= = 1 ){/ /等松键
35
.if ( P.32 == ) key10=0;136. } //按键
未
3. els7e{38 3.9
.if
P(3. 2== 0) k{y1e = 0;
140 .i( f+s10 += 6 > )1s0= 0 41.;42. 3. 44. 445 .46. }/按/个键处位理P3.3 = 1;/ /P.3 作为3入输,要先出高输平电 }b erka; //束“循结 环2”,改显修示
i
(f eky1 == 1)/ /松等
键4.7{ fi (3.P =3= 1 )ke 1=0y ; }4. 849 el.e s {//按键未
if(P3 3. == 0 { )ky1e= 1;
5
0. fi( +s+ >1 10= )s1= 0; 15 5.2 5..3 5. 554.} } /循环/2‟e n d}/循环/1 ‟ned} rebak /;/结“束环循 ”2,修改显
示5
6 ./}ma/n‟ined共 9页 上一:页 1[] [2 ]3 4] [5] [[6 []] 78][ 9][ 下一页第三节 :十路字口通灯交 如一个果位单时间为1 秒, 里设定这十的路口交字灯通按如下方四式步个循骤工作: 60环 个位单时间,南红北,西绿东;
10 个
位单时,南间北红东西,;黄 60 单个位时,间北绿南,西东; 红1 0单位个时间南,北黄东西,;红解 用: 1 P口的 端 个引6脚制控通灯交,高电平亮,低灯平灯灭电 。代 码.1# icnulde a 2 /.sbit 用/来定义个一号符地位,址便方程编提,可读高,性和可植性 3.移s ibt NSeR =Pd^1; //0南方北红灯向 /南北/向方黄灯// 南方向北灯
4.绿 sbtiS YeNlolw= 1^P; 15 sbi.t NGrSene =1^2; P6.sb i EWRtde= 1P3^
;//
东方向西红 灯/东/西方黄向 //灯西东向绿方灯
7.
bsti EWeYlowl=P ^14 ;8.sbit EWG ern e=1^5;
P9./* 用 件产生软延一时个单位时 */ 间0. v1id oDleay1Unit void( 11) {. 21. unigsend nit i,j; 1 . f3r( oi=;0 i
s5. /1还/以通可生成过编汇序来计程算指周令期,结数晶体频率来合整 调 循j环次数,近接1m s
1. } 671. / 延时* n 个位时间 */ 单8.1 vidoD laye (nsignuedi ntn ){ f o( r; n!0;= n-- ) elDy1Unita)(;} 1. 9oid vmia( voind) 2.0{ 21 .whi l(e ) 12. {22 3 .NSedR0=;S YeNllwo=0; NGreSne1;= EWeR=d;1 WEellYo=0; EWGweern=; 0 Dlea( 6y 0);24 . NSedR0= ;NSeYllwo=; SNG1ren=e0 EW;ed=1R
; WYellEow0= ;WErGen=0;e Deayl 10 )(; 25 S.NeRd=1;SNY elol=w0; NGSrene0;=E ReW=0d E;WellYow0;= WGEerne=; 1 eDly(a 06 ;
)
26.
S
RNd=1;eSNY elolw=;0 NSreen=0G; WReE=d;0 WYElleo=w1; EWGrene=0; De ayl 10 (;)
2
. } 728. }共 页9: 一上页[ 1] 2[ [3] ] [4]5[6] [7] 8[] 9[ ]一页 第下四节数码管驱动:显 示1“234576” P18 口端 8 联共阴接数管 码SELD 的段8极:1P7 接. h段,,P1.0 接…段a P2 端接 8 联口阴共码管 S数LDE8的段极 P2.7:接 边的共左阴极,…,2.P0 右边的共阴极接方 说案明晶振:频 率fso=12McHz数码管,用动采态刷方新显示式在,1ms 定时 断服务序程实中 现代码1. # icnulde h. un2singed chraD sBiu[f]8 ;对应左S LDE ,3 v.id DioplsaByrshu( oivd) 4 .{ cdoeu signed nhca crahtode[8]=0x{e,fxfd,00fxb,xf07,0exf,xdf,00bfx,0 7fx; //}阴控制极 5码 .odC ensiuned ghcarSe g7oCd[e61]=// 用六十数进为数组作标,下可直接取对应得 七的段码字编节 6 .0{3fx,0x60,05x,0xbf4,x66,006x,d0x7,0dx070,x7f,x06f0,x770,xc7,039x,x 0e,0x579,x01};7 .7sta ticun siged nhcr ia0=;// (0≤i≤ ) 循环刷7新示显由于,是静态量变此赋,值 做一次只 8. P2。 0xff;=//显 示消隐,以免下段一码值示显前在支 一LED S/全/局显示冲缓区,D isBfu0[对应右] SLED, iDBsuf[7
]9
.P1 = SgeC7od[ DiseBfui] ][ ;//从显缓示冲区取出原始数, 查据表为变段码后七送出显 示01. 2P =athcod[ i ];e 11 .f( i++ >i =8 ) =i0;1 .2} 13. vo d iTiemrI0tRnuot(e voi d)in treurpt1 1. {41 .5 LT0 -=001; //由于0TL 只0有 8bts,所以将i(1-00)0低8 位给赋T 0L// 将对阴极应置,低显 示/指/向一个数下管码和应相据数
1. 6TH0 =( -010)>>0;8// (取10-0)0高 8 位赋的给 HT0重新定时,1ms 1. D7spilyBrash()u;
1.8 1}9. vidoTim e0rnIti( voi d)20 { TMOD=.T(ODM 0xf&0 |) 001x //初;化始,定时器 T,工作0式 方 12. T10 = -L0100;//定 时1sm22. HT0= (10-00>)>8 ;2. TR0 =3 ;124. TE =01; 2 .5 } 2.6void iDpsay(lu sinnegdc ar indeh, xnusgnei cdhr adaaVatle u{ Di)Busf[ i den ] =x dtaaalVe; } 2u7. vodimain( vo di) 82 { .2. 9nuisgend hca ir;3 . fo0r( =0;i 数,函下:如 代 1. 码#ifndef_ KY_EH_语 句. 2de#inf e_KY_H_E /只/要引用一次,过即 inc#udle ,定则符义 _KEY号H__ /防止/复引用该文档重,如没有定义果符过 号_KEY__H则,编下面译 /允/许C PU 响中断应请求 /允/许T0 开始计 数//许允 0T计 数出溢产生中时断求请
3
u.sngnedi charkeyHit( oivd ); /如果按键,则/回非0返否,返回0 则4.un sgied chnrak yeetG( vio d;)// 取读按值,键如没有按果键等待则按
到键为止 .5 oivd kyePu( utsnigne dcah ucrKyealV ); //存保按键 值uceKValy 按到缓键冲 队列
末
6 vo.d iekBacy( knsiuneg dchar cKeyual ); V/退回键值 ucK/eVayl 按键到冲队缓列首 7. #neif
定义d函体文数 KE档.YC如下:,代 码 . #inc1uled “kye.”h .2# deine fKeyuBSfze i16/ 定义按键/缓队冲字列节 3数. nsugned chir KeaBuyf[ KyeuBfizS e;] /定义/个一无号字符符组数作为按键缓冲队 列。队该为列先进4 /./先出,环循存,取标下从到0K eBufSiyze-
15 .nuisneg dcharKey BufpW=0 ;//作为组数标下量变,录记入存置 6位 unsi.nge dhcarKe yufRB=0; //作为p数下标组量,变记录读位置 7出./ /如果存入位与读出位置置同,相表明队则中列无按数据键 8. usnignde car hkyHit( veoid) 9 { .i( KfyBufeW p= KeyB=ufR )pre urt(n0 ;)e sel retunr( 1;)} 01 .11 .unisngedch a keyGet( rvoi d) 1.2 { nsignue chard retVa;l /暂/读存出键 值3.1 whlie(key Hi(t=)0 =) ;/等/待按,因键为函 k数yeHti)的(返回为 0值表 示按键无
14.
etVal =r eyKBuf K[eyBfuR ]p ;/从/数组读中出值 键1. if5(+ Key+BufpR> =KeyB fSuzi e) eKByufRp0=; /读/置加1位,超出 列则循队环 回初位始 置61 re.tur(nr etVl );a 71 }. 18 .19 .voidk eyPu(tu singnedchar u ceKVal )y 0. { KeyB2u[f eyKBuWp f] =u KecVayl;/ 键/值存入数组2 1.i (f+ +eyKBfWup> =KyBufSeize) Ke ByufWp=;0循环回 初始置 位22. } 3.2 ****/************************************************************* *********************** //*入位置存加1超出,列队则
24
.由于种原因,某读的按键,出有用,没但它任其务用该按键要但传送,又不便方。此时可以退回按键队列。就如 取错信了,件必要有回一退样 52. ****************************************************************** ************************/2 6 vo.i kedBacky (unignsde carh cKeyuVl ) 27.a {2 . 8* /29.如果 K eBuyRfp0= ; 减1 后为 F则F,H大 于KeByfSizu,e从数即头退组回到组数尾。或 由者干扰使于得 KeyuBRf 超出p队列位,置要也整调到回常正位,置 03.* /3 1 .i( --KefByuRpf >=Ke BufySiz e )eyBKuRf=pKyBeufiSez1- ;23. eyKuB[ KfeBufyp R = ]cKeuVya;l //回键值 3存3.
}面下渐讲解进盘物理层的驱动。 键路共电点:P2同端口 接共阴一码数,管共极接 GN阴D,2.P0 接 a段 、2.1 接P b段、 、…P27 . 接h段 。 软共件同:c点doe nuisngdecha rSe 7Codge[01 是]七数码管段共编阴码表。C od unsigend cehra eS7gCdoe[61]= / / 0 1 23 456 7 9 A b8C d E
F
{03fx,0x 06 ,x50b ,04fx ,x066, x6d0, x70d ,x07, 0x70, f06x,f x77,00 xc7,0x3 9 0x5e,,0 7x9, x071} ;例一P1:.0 接按一键 GN到D,键号编„为‟6显,按示。 键码代 1 .in#lucde a h.2# inclde uK“E.H” Y3.vo dima n(ivo d )i 4 . {P10_= ; //作为输入引1脚,须先输出必高电
平5
.while( 1) /永/为远真,即死循 环6. if( {1P0_ = = ) //0果如键,按为低电平则7. {ke Puty( 6) ;//保存键按编号为值按键
队列 .8 hwiel P(_10 = 0 )=; /如/一果直着按,键不停地执则该循环行实,际等待松键是9.
10. }if k(eHit() != y ) /0如果/列队有中按键1 .1 P2=eS7Cogd[ keyGeet) ];(/ 从队列/取中按键值,并出显示数在管上码 1. }
2
1.3 }
例二:在例中考虑一按键 0ms2 抖问题。
动代
1.码# nicule 2. incl#ue “KEY.Hd”3 .v od iami( nviod) 4.{ P1_ 0 =1 ;/作/为输入脚,必引须输出先高平
电
5. hwile(1 ) / 永远为真,/死即环 6.循{ if P1_( 0= = 0)/ /如果按键,则低为电 7平 . {delay0ms2)(; /延/时2 ms,0跳接下过抖动 .8 ekyuPt 6( ;)/ 保/存键按编值号按键队为 9.列 hilw( eP_10 == 0 ) /;/如一果按着直键则不,地停行执该环,实循是际待松键等 01 d.eay2lm0s)( //;时延20 ms,跳松开过动 抖11. }
1
2 i.( kefyHi() t= 0! )//如果列队有按中 键31. P2S=ge7Cod[e keyGt(e) ] //;从队列取中按出值,并显示键数码管在 上4. 1}15 }.
例三:在例二
考中干虑扰问题即。小 于0ms2的负 脉干扰。
冲码代 .1#i ncudl eat 2. .#nicldue“K EY.H ”3 voi.d mian (vod i) 4.{ P 1_0 = 1 //作为;入输引,脚须必先出输高平
5. 电hiwe( l 1 /)永/远为真,即死循 6.环 {fi P(10 == 0 _ //如果按),则为低键平电7 .{ d eayl2ms0(; /)延时/20ms ,跳过接抖动 8.下i f P1_0 (= 1 )=c noituen //假;按键9 . ekyutP( )6; //存按保编号值键按为键列 10队.w ihe( lP_01 = 0 );=//如果 直按一键,则着停不执行该循环地实,是等际待键松 11 .dlaey0ms(); /2延/时2 m0,s过跳松开动抖
12.
}
1.3 i( kfyeiHt( )! 0=) //如果列队有中按 键14.P =2Seg7ode[ kCeyetG() ; ]//队列从取中按键出,值并示显在码管数 1上.5 }16 . }
例:状四态编图程法。通过 0ms 周期中2,扫描按键断
。代
码 1./* ******************************************************************* ******************* 2* .采晶用为 体12KH z,指令周期时为 ms1即(频主为1KHz ,这)样 0T工 在作定器方时式 28 位,自动载。 重计值为数20 , 可产生 2即0ms的 周期性断,中 在中服务断序程实现中键扫按 描3.* ****************************************************************** *********************/ 4. *i#clund e 5. #ihnlcude K“EYH”.6. vo i madn(iv iod ) 7. {8 T.MOD =( MOTD& 0 x0f) 0x|02;//不 改变 1 T工作方式的,0T 为定器时式 方 92. H0 T=- 0; 210. TL=TH0; 11.0 RT=10;12 .ET=0;113 .EA =; 1//计数期为 周2 个主0脉,即 频2m0s/ /软先载加一计数值 /次允/许 0T 开计始数//允 许T 0计数出溢产时中断生求请 /允许 CP/ U应响断中请
求14.
whle( 1 )i/ 永/为真,即远死环循1 .5{ 16 .i ( kefHity() ! 0= ) //如果队列有按键 中1. 7P=Se2g7oCde key[eGt()] /;从/列队中出取按值,键显并在示码数管上18 .} 9. } 10. 2vido tmirein0t void() interr pt u //201m;sT0的中 断为号 121 {.s atitc nsuigedn chr sts=a0
;
22
. 1_P0 =;
1
//为作
输入脚引,须必先输高出平电
23
.sitwh(csts ) 24 . 25.{ 2. ca6s e:0i f (P1_0=0 )= ts=s; brea1; k/按/键则转入状态1 c sea 1 :/假按/错或干扰,回,状态 0
27.
i( fP_1==01 ) tss=0
;2
. e8se{l sst=2 ;eykPtu 6 () ; /}确实按键/,值键入队,并列转态状2 9. b2eakr 30.; 31.32. 33 3.. 4 3}. 5}ca se2 :if( P1 _0==1 sts)=3; rbeka;//如 果松,则键状转态3 cas 3:ei (f 1P0_== 0 )tss2; e=lsests= ;0// 假键松回,状 态2
//真键松回状态 ,0等待,一次下键按程过
例五:
状态图编程法
。码代 .1 /****************************************************************** ********************* *2 如.果采用体为晶12MHz ,指令周时期 为u1s即主频为( 1MH)z,产生 20ms 左右的计时,要 计则数达值 2到0000,T0 工作须必定为器方式 时,16 1位非动自载重即可产, 生02m s的 周期中断性,中在服务程序中实断按键现扫描 . *3****************************************************************** **********************/ 4.#i ncludeh . #i5ncudel“KE Y.”H . 6oiv maidn (vodi) . { 87 TM.O =D T(MOD& 0 fx0) | 0 0x1; /不/改变T 的1工方作式,T0为 定器时式 1方9 .T L 0=- 2000; 0//计周数为期20 000 主频脉个自,取低动8 位 /右/移8 ,实位际上是高取8 位
10 .T0H= ( 20-000)>>; 11.8TR0 1;=12 .ET=01 ;31 EA.1=
;
/允许 T0/ 始计数开// 许 允T0计 溢出时产数生断中请 求//允 C许P 响应U中请求断
14
. whlei(1 )/永远/为,真死循环即15 . {61 .fi(k yHeit)(!= 0 ) //如果列队有按键 1中. 7P=2SegC7oe[ dekyGt() ]e; //队列中取出按从值,键显示并在码数上 18. }管 1. } 209 v.ido tmire0nt( vioi ) dnterirutp1 /2/0ms;T0 中的号断为 11. {2 stati ucnisngd ehacrsts=0; 22 TL0.= - 2000; 230. H0 =T( 2-000)>08; >2. P41_ 0 =; /1/方式1 软为重件 //右载移8 位实,上是取高 际8位
//作 为入输脚,引须先必输出电高平
25
. witsc(h ss )t26 . { 2. 782.c ae s:0i f P1(_0=0 =)st =s;1break; //按 则转键状态 1入 ase 1c ://按假错,干扰或回状态,
02
9. if (P_01== ) st1=0s;
0.3 esl{ ses=t2 ;eyPkt(u6 ) } ;/确/实按,键键值入列队,转状态并 231 .br ea; 3k2.33 3..4 53. 63 .} 73 }. asc e: 2fi (1P0==1_ ) sst=;3break; //如松果键则,状态 转 3cas 3e if( :P_10=0 =) sts2=; les ets=s0; //假键,回松状态
2/
/松真,回键态状0,等待 下一按次键过
程例六4X4 :键按
。代码
.1 *****/************************************************************** ******************** 2. 由 *1P端口的高 4和低 位 4构成位 4X4 的阵键盘,矩本程只认序为单操作键为合,同时法按多键 时效。 无.3这 样下面 的X,Y 合的值为法 x70 ,0x, 0bd, 0xex ,0fx,通过表k yeode 影射变换可得 按键C值 4.** ***************************************************************** *********************/ 5*. #icnudel h . 6#nilucd eK“EY.H ”7 u.nsiged nhcra keycSa(n vid o)//
返回 表0无按键,示或效按键,其无它值按为键编 码 8. { co值ed nuignsedcha r ekyodCe1[]6 9. /0=x0 0x1, 0,x2,0 3x,0 x, 4x0, 506x 0,x, 7x80 ,x09, 0xA, xB,00xC ,0 x , D0Ex ,0Fx 10 .{0 ,3, 0 , 4,0 0 },; 0,0, 0,0, 1, , 00 0, ,,20,
1 1 .nsuigen cdhra , y, xrtVale ;1.2 P1=x0f; 013. =x1P0&0f; 1x. P4=0x1f;0/ 低/四输入位高四,输出 0位 /P1/输 后入,高清四位,作 为X 值 /高四/输入,位四低位出 0输
15
.y (=1P> >4 ) & x00f; //1 P入输后移到位四低位,清并高四,作位 Y 为值
16. re
Vtal= k yeodC[xe*] + 4keCyoe[y];d /根据/本式公算按键倒编码 7. if1 r(etVla== )0re tunr(0;)el es reutrn( retalV4 );-1 8 . 19. //比}按如键1„,‟ 得X0x7=,=0x7Y算, ret得al= V,5所以返回函数值1。 0. //双2按键„如7‟得, =X0b,x=Yx0d,得算re tVla1=,所1返回以数值函 。7 2.1v io daimn(v io d)2 . { 23.2TMOD =(TMO D& 0x0 ) |f x001 /;不/变 T改 1的工作方,T式0为 时定方式 器124 .T0 L= -00200 25. ;T0 = H(2-000)0>>; 268. TR=0; 12.7 T0E1= ;28.EA= 1; //计周期数为20 00 个0主频,脉自动低 8取 位/ /移 8右位 实,上际取高是 8位
/允许 T/ 开0计始数 //许允 T0 数溢计时产出中生请断求//允 许C PU响应 断请求中
2. w9hlie( 1 )//永远真,为即循环死30 {.3 1 .if( kyeHi(t != ) 0 )//如队列中果有键 按2. P2=3Se7godeC k[yeGte) ]; //(队从列取中按键出,值显示并数码管上在 33.} 4. 3 }53.vo i dimert0nt(ivo id) i tnrrupet 1 /20m/s;0T的中断号 为1 63 .{ tasitcu nigsendc hrasts=0; 3 7 .TL 0 -=0020; 08. 3HT =0(- 2000)>08; 3>9.P _1 0= ; /1方式 1/ 为软件重 载/右/ 8 移,实际上是位取高8 位
/
/为作入输脚,引须先输必出电平高
4
0.sw tcih( ss t )41.{ 4.24 . c3sa e0:i ( feySkcn()!=a0) st =s; bre1k;a//按 则转入状态键1 asec1 : //按错,或干扰,假回状态0
4.4 if( ekSyanc)==(0) s ts=;0
4.5e sel{sts=2; eyPut( kkySeanc)( ) }; //确实键按键,入值列队,转状并 2态 64. rbeak 47. ;8. 494 .cae s:2 ifke(yScan()=0= st)s3=; break ;//如松果,键转状态则 3acse3 : fi (kyScena(!=0)) sts =2;// 假键,回松状态2
5. 50.1 }52. }
else
tss0=;
//
松真键,状回态0, 待下等次按一过键
程
共 页9: 上页 [一] 1[]2[3] 4[] [] 6 [57] 8[] []9下一 第六页:节低频频计 实例目率的:时定时学器计、器、中断应用 数说:明选用24MH z 的体晶,主频达可 MHz。用 2T 1生产100u s 时标的,T 0作号信冲脉计数器假。晶 体设率频有误没差,且稳而不定(实变上际达万可分一);被之测信号周期性是矩波形正负脉冲(度都宽不 小能 于.05us,频)率于 1MH小z,大于 1H。要z求测量标时1 S测量精,为 0度1.。%解 :从测精量度要求看来,当率频过超1K Hz时 可,用采1 时标S内计数号信脉个数来测量冲号信频, 信而频率号于低 1KHz 时,可以过测量信号通的期周来出求号频率。信种
两方法动自转。 对于低于换1K Hz 的信号信,周号最期小为1 sm也就,说是超 100过0s,而u们用我定的器计时时冲周脉为 期.0us5如,果定时多或计少计一个脉,误差冲 为us1所,相对以差为 1误us1/000s=0u.1。信号周期%越大 即信号频,率低越相,对误就越小差 。上面描从来述,看当号信频超率 过1Kz 后H,信号期周就于 少1000us,然显采上用的面测量方,不能法 达到测精度量要求这时我们,采 用S1 位时间计数单号的脉冲个信,数最少计到 能100 个0冲,由于脉信号频率 不过 1超HMz而,我定时们冲脉 2M为zH最,差计或少计一个信多脉冲,这样相对号误差为 1/000,1可见信 频率越高号相对误差,越小 。信号除输入 到T(1P.53)外,输入到还 IN1T(3P.)。3 码代1 .nsiunge dit nu1s0; 20 .unsigen dhacrSe cod;n3. un igsed intn K6; 44 .usignedn harc odl0T; . unsign5d enti olusd old,6K,4o dlT1;6. uns inegd log fcn; 7. yibtH ihLowg1;=/ 存放/率值,单频位为 z /H/ 6对4 K位单数计,即多少个有64 //K 对100u s时间隔间位单数计即,有多个少100us。
//1:
示表信号超过 1KHz0:表示;信号低于 K1z。
H
.8v od iIitialnigH( hvoi d
)
9 {.
10 IE.=; 0P=I0 Hi;hLgwo=;1 1. 1MTO = (DTMDO & 0fx0 | 0x)02 TH;=-0200; T0LTH=0 P;0=X; T1=0; 12. 1MTOD (T=OD M 0&x0f)| 0x5 ; T01=0;HTL 1=;0T =1;1ET =1; 113. sU010=; 0Sceod=n0; 6K=40;14. ldK64=0; oodT1l=;
0
5. TCON 1|=0 50x ;61.EA =1; 1 .7}
/
同时置 TR0/1; TR1=1;=
81.vo diIniti lLoa( vowd i) 9. 1{2 0. EI0= I;P=0; iHhgLow=; 201. TODM =(TODM& 0x f)0 0|02x;TH 0=-02;0TL0 =H0T E;T=10 T;R0=1 22. I;N1 T =1;I T11;= EX1=;1 32 U.1s0=00; Seocd=0;n K64=; 24. o0dl6K4=0;old 1=T; 25. 0A =E ; 12. }62 .7v iodT i0tr( vond )iinter urpt 12 .8 { if (ighHLwo==0 )++u s100;29 .e sl 30. efi (+us+100 >=1 000 )03 1 .{ nsugine ind tmtp1,t p2m;
32
TR.=01 ;mp1t(T=H
4
1 . st{tai cnsiguen dcah rsst=0;4 2 s.wich(ts s )t 43.{ 4. ca4es 0:sts = ;1 rbeka 4;.5c sea1: ldT0=TL0o ;oduslu=s10;0s s=t2 ;beakr 4;. 6cae 2:s47 { .8.4 nsiungde hcart mp1 t,pm; 29.4 R0=T0 tm;p=1TL; 0tp2m=su00; 1R0=1;T5 . 0cy f 1=000000L(/( mp2-otduls*1)00L+ 25(-6tm1)p/2 ) 51; S.ceon +d+ ;52 } 53. Sts.= ; 504. rbaek ;55 . }5.6 5}. vo7di man( ivoid) 5 8.{ 59. i(fHi ghLwo==1 )nIitilaHgi()h ;lee sIitinlLoa(w) 6;. Wh0lie(1 61). 62{.i f(S ecodn! 0 =)63. {6 . 4Second= 0 ; 引前面用数的码驱管动序,程注下面对意 0 T中断务程服的修序改
65. /
d/sipal fyc
y66
{ u.sningd cheari; 67. orf(i =0;i
8
6
.9 i(fH ihLowg== 1 )07.if( fc y1
码管显刷新示77. ovdi 0Tint( rovd )i ntierrut 1p78 . {79 .satic tusngiednch ar ms = ; 80. 0f( HigiLohw=0 = )++s10u;081 e.sle 28.if( +us+100> =01000) 8 3 . unsi{ngde nt impt, 1mt2p; lee sf(ifcy> 001L )0{Ini atHilhg);(}
8
4 TR.=0;1t p1m(T=H= 1 0) m{=s0;D spilaBryuhs);(} / /m1s 码管刷数新 91 }
.共9 页: 一页 [1上] 2] [[3 ]4[ ][5] [6 7] 8][[9] 下 页一第 节七:电表子单键可 调子表电:主要习学编方程法 。部中外断应用,中嵌断 :解子表电分为工状态作和整状调态平。时为工状作,态键不足按秒,一接键换屏„为‟S按键。超一秒移
过
位
进则调整状入态C„,而‟且调光整在标秒个位始。开调状态整,按键不足一秒时为标移光„M‟动,过超秒一则 调为整数,每读 .5 0加一„A‟,直秒松到;键如果1 0秒无键按自则动回到作工状态W‟„ 。果如有、年月日、时、、分、秒四。数码联可分三屏管显示,示显式格为年月.“、“”.时日.”“分、.秒,从” 数小的位点来区分显置内容。示(月份的十数位也可用“以”-和-1“”示)。表代码 1 .e un mstatus ={W okr Chan,eg ,Ad,dM oev ,Srece }n// 状牧举 态2.// 时和计调都是对下整时面数组 T间im 进e行改修 . 3nuisnedg har ciTem[2]1{0,4, =0,, 16,, 00,8 ,4,5 3,2}, //;4 0年0 月 10 日 06 时8 45 32分 秒4 .nsuigndec hra curor = s2; /1/向秒指位,个= 0时无标光5 . nsiuged nchr YmahDMs 3=; //向指分“”秒显示, 0= 时屏无 6显 s.attciu nigsed cnarhsts = Wokr;7 .*/ .8 如 果urcos 不r 为0装入 Dis,Bfu的对 应数位, 按0. 秒2期闪烁周,即设一 0个. 秒计数器 1S1,S00 为奇1时数灭,0S 为偶数时亮1 9. 。数小点示显 Y与mDhsM变量相关。 10. / *11 v.odi isScan(Dvoid ) /动态刷/显新时调用。没编示完,对共针数码阴,管给出控只 制控法 12. { 算1.3 //DisuBf每 个显数示的高据位四标为, 志高最位 7 D为负, 号D6 为小点,数D 为闪5 烁14.u snignedc ahrt p;m1 5. tp m =egS7oCed?[x &x1f0 ; 为]七码段 6.1i (f?x & x40 0) tp m|= x08;0 //添小加数 17点.i f(? x& 0x 20 ) if( S01 {&0x0 )1t p=m0 ; /}闪/,S烁1 奇数时0亮 不81. //里没有处这理号负位19. //将 tmp 送 出显,示并控对应制数管动码显作 20示 } 21.. vio Ddsilayp (vio d 22) { 2..3 i( cursorf != 0 {) mYhMD=(cussrr+3o)4;/ } /1../=41; 5.8=2.; 9..21= 3 24 f.r(oi =YmD(Mh-1s)*; 4
变
27 if( . i== curso(-1) ) Dirbuf[js |=]0x 2; /0闪烁/c,ruos!=r0 才闪时烁
2
.8if( (==9i )| 2|. 30.931 (.==i)7 | |(i=5=) ||(i== 3
)/小/点:分数位个
//数小点时:位 个//数小点:个位日 //小
数点月:个位
2.3 Di)buf[js ]| 0x4=0 3;.3 /i/f(i=2)={i f(Tmi[e2=]=1 D)siuB[2]=“f-”; 1lseeDi Busf“=”;-} 3 . }4 35./ /作工态状根据 Y:Dhms M将屏数据装 D入siBuf36. / 调/整状态根据 :urcors 将屏据数入 D装iBufs3 7 .}3 8 .ovd iKyeScna( vido) //根据 状扫态描键 按//据状根处态理键息信
39
. ovi droPecssKye(v oid) 4 . 0 {4.1 kyeal V =KeyeG(t;
)24.i f ke(Val == y0 r)etru; n3.4s itwc(h sts )44.{ 5.4 46. 4.7 84 .9.4 5.051 5..25 . 543. }i ( kfyVea l= „C‟) { st= =sC hagen Y;DhMsm= ;3 Crsou r 12; =cseaW ok:r if keyVa(l== S‟) { if„( -YmDhMs-== 0) Y DhmsM= 3 ;//换
屏
55. 5. 57. 58.65 . 60. 691. 6.2 } 63 .
}} rbeak c;se Caanhge i:( kefyVa l= „=W‟ )if k(eVal y== A„ ‟)i ( fkeyal ==V „‟ M) /根/据c ursrob eakr
;共
9 页 上:页一[1] [2 ][3] [] [4] [6]5[ ] 87[ 9 ]一下页 第节八:行串口用 应一 、用晶使频体为率2 21.841MHz 的T89AC5 单2机片串,口行应工作用式 1,以 96方00pbs 的特率波向外 发数送据数,据为个十数字0‟„„到9,循环‟断不发地。 送:数字解字符增为量进进二码制,„0对‟应0 x0,31„‟=„0 +‟ = 013x,从1„‟到09„‟对应编为 0x码3 0到0x39 ,忆二进记编制较码难实际编程中,单用号括引起对字符表应示用该字符引的进制编码二值,如?‟„表示 用引?号编码值的 。用在1 .1502M9z H晶时体,960bp0s 初的化分始频值初-6为,晶频加现,如倍其果它条件变不,只分有 初始频加为倍1-2,才能得 到9060pb;如果s得到想 240b0s(速率降 p4 倍,分频初始)自然大 4加倍,即 -4为。根据题8编意得下程序:如
码 1. 代incl#de u.2. vio madin (oidv )3 . {. TM4O =D (TODM & 0xF0)| 0x2;05 . H1T= 12- 6. ;CPNO = 0x|8; 0/SMO/ D=1 7 .RT1= 1 8. SCO;N = x042;9 .w ilhe ( ) 110.{ 11. fi(T =I=1
)1. 123.1 . 41. 156 1.. 17. 8}1 9.}
{satictunsi gne cdarhD ta=„‟;0SBU F= D ta;TI = 0;I f(++ Dta> „9 ‟)D ta„0=‟; }
、二在 题的基上础上,改 为4020pb,循s环发小写送母字a‟到„z„‟然,是后写字母„A‟大„到‟Z
代。码 1 #.nilcdue 2. hoiv dmain v(odi 3). 4. {MTOD= ( MODT 0x&0) F |x002 5. ;TH1 =-96;/ /注意不用倍频式
方. 6CPON& =0xF; /7/SMDO= 70 TR.1 =;18 .CSN = 0xO24 9.;wh lei ( 1 )01 {.11. 12. 31.14 .15. 61.i f( IT==1) { s atit ucnsined ghca Dra=t„‟a ;BSF =U Da; TtI= 0 ;/ If/( ++aDt > 9‟)„ Dt=„a‟0;
1.7 1. 198 .02 21. .}22. } }
+D+at if(; aD t= („z‟+=)1) fi(D t a==( Z„‟1) )+ Dta„=A‟ ;at=D„‟;a
上述
变改值时也,以可再设变一量示表前当的小写大状,比如写成如态下式方:
代码1. ++ Dat 2. ; {3. satictu signen chdra aCsp1;=4. i( fCas p! 0 )=5. i(f at>„ZD‟{ D)at„a‟;=Ca ps0=; }
.6e le 7s 8. } if( .Dt>az‟„{) Da=t„A;‟C pas=1 ;
}下写如有法误:因为小 b错比大 Z 的编 码大值所以, atD 是总a„
‟代码
1.
++aD; 2.t i(fDa >„Zt‟{) Dat„=‟a} . 3lee sfi(D ta„z‟){> aDt„A=}‟
三、
A 有和 B 两台片单,机晶体率频分别 13M为z 和 H1MH4,z在容易程编条件的下,最快以速的进度 双工串行通行,A 给 B 信环循送发大字写母„从A‟„到Z,‟ B 给 A环发送小循字写从母a‟到„z„‟,双方用中断方都 进行式收。发 解:于由体晶频不同,又率不 成 倍关2系所,只有以信方通式 1 和式 3方由于方式,3 的帧方比 式1多 位一显,然方式3 有的效据(数9/11)比方式1(8/10) 高但,用方式要3 的第 9位 TB 来发8送据,数编 难度较程大,这方式里 1 较容编程易。
在计算最速率时高由,单于程,双方知未数又不,知波道特为率多,少所要综合各以面的条方,件算出估 和AB 分频的常数分别,为-1 3-14 时,速和不率但同,且为相大最值。如给出下 A机程序:
的码 代1 #.incule dh 2.void ma i( novdi) 3 {. 4.TM O D (T=MO D& x0F) 0 0|20; 5x.T 1 =H 13; -//意用倍注频方式
.6PC N |O= 08x; /0S/MD O= 17 .T 1 R =; 81 .CSN O= x025 /;/RNE = 1 9.ES = 1; 10. A E= ;1 11 w.ilhe( ); 12.1 }13 .v io dS232Ri_trn voi(d )ntierrput 41 4 {. 5.1 unsigndec hra rDta 16. ;if (RI== 1 ){ RI=; rDa0t=SBUF } 17. ;if( T=I=1) 81. {9. 120 2..1 2.2 3.2 }42. st}ait cunigsen char tdaDt„a‟=;S BFU = taDt;T I=0 ;f(I+ Dat + >„‟z)Da t„=‟a ;//意 注RI和 T I 任位变一 1 都中断
为四、 多机通位 在
式方2 和 式方3 ,SM 只对接2有影响,收 当MS2=1 时,只接收第 位9于等1 的 (帧伪地址帧)而, S2M=0时, 第 位不影9接收。 响多机通信中,地址确的与本机认序程有关,所可以以实点对现、点对组点以、通及播式方的通信 。果如收共用发总一,任线何时只有一个刻发源能送用占线总送数发据,则发否生冲。由此突构可无竞造争的令牌网 ;或者主多竞争总线。网 共 9页 :一页上[1 ] 2[ ]3] [[]4[ 5 [6] []]7 [8 ] 9一页
下