Phn cng n gin l mch vi iu khin PIC h tr UART (v d PIC 16F877A), c y b dao ng, ngun, mch reset,, cng COM cm board v IC chuyn dng h tr RS232 (MAX232A). Ghi chp ny ch bn v giao tip ng b (Synchronous khng c bt tay) nn cng COM ch cn s dng 3 chn Rx,Tx v GND l . II. Phn mm:
Trn my tnh, chng ta dng Visual Basic (VB) vit giao tip. VB h tr Component (module add-in) Mscomm. Component ny khng enabled mc nh. s dng, trong VB, nhn Ctrl + T (Project -> Components), ko chut xung, v tick vo Microsoft Comm Control 6.0.
Duy Thi giao tip PC vi PIC Trang 3 / 7 Nhn OK, ngoi thanh cng c xut hin thm mt icon . Tip theo, add 1 Mscomm vo Form. N t ng c tn, chng hn Mscomm1. Mscomm1 c nhng properties sau y:
CommPort: 1 = S dng COM 1. Handshaking: 0- comNone = Khng dng bt tay. InBufferSize: 1024 = B m nhn ( cng ln th cng tt). InputLen: =chiu di (tnh bng Byte) ca gi tr gn cho Input Property. (v d: =1 , data=mscomm1.input (data l s Int hoc Str). Nu InputLen =0: Input s c chiu di bng s byte hin c trong Buffer. Thng do VK ch c th send 1 Byte mi t nn thng set thuc tnh ny bng 1. InputMode: 0 = Text mode, byte nhn c chuyn sang ASCII tng ng trc khi gn. 1 = Binary mode. OutBufferCount: s Byte ang nm ch gi i trong Buffer. OutBufferLen: chiu di Buffer tnh theo Byte. Duy Thi giao tip PC vi PIC Trang 4 / 7 Rthreshold: s Byte phi nhn trc khi Mscomm1 to ra 1 event (l event OnComm, khi CommEvent = comEvRcv). C th hiu l s Byte phi nhn trc khi Mscomm1 to ra 1 ngt, ngay khi c ngt, VB nhy vo lm vic event OnComm. Sthreshold: tng t Rthreshold nhng l dnh cho Xmit module. N l s Byte nh nht c th truyn i trong b m truyn trc khi Mscomm1 to ra event OnComm, CommEvent=ComEvSend. Thng ci ny t khi s dng, khng cn quan tm n n cng c th send data to PIC. Settings: set Frame truyn. C dng sau: Settings=BBBB,P,D,S vi BBBB l BaudRate(110,300,600,1200,2400,4800,9600(default),14400,19200,2880 0,38400,56000,115200, 128000,256000) ; P l Parity bits (Even,Mark,None,Odd,Space); D l s data bits (4,5,6,7,8 (default)); S l Stopbits (1,1.5,2).
s dng Component Mscomm ny c data t VK, ta thc hin theo trnh t sau: Trong Form_load():
Dim Sinput as String Ki tu nhan vao Mscomm1.settings=9600,N,8,1 Mscomm1.commPort=1 Mscomm1.PortOpen = 1 Mscomm1.rthreshold=1 Mscomm1.inbuffersize=1024
Va ri l on khi to Port.
Sau , bt c khi no c Event OnComm, chng trnh sau y c thc hin: Trong mscomm1_OnComm():
If mscomm1.commEvent = ComEvReceive then sInput = mscomm1.Input Duy Thi giao tip PC vi PIC Trang 5 / 7 label1.caption = label1.caption + sInput hin th nhng g nhn c ln Form. End If Nu mun gi data cho VK, th d ang trong Command1_click():
Mscomm1.output = data_to_be_send lu y : v d data_to_be_send=A kiu String, th PIC nhn c m ASCII ca A (chng hn 0d123). ch ny hay b nhm ln.
Duy Thi giao tip PC vi PIC Trang 6 / 7 III. Phn mm trn PIC (firmware): S dng Compiler CCS C vi nhng lnh h tr sn, ta khng cn quan tm nhiu n phn cng ca PIC (Registers, Protocol,) mc d nh vy c v khng chuyn nghip. CCS C khng h tr tc ng n thanh ghi mt cch r rng nh HT-PICC, mc d vn c th lm c. tc ng n thanh ghi, ta khai bo #l ocat e tn_thanh_ghi a ch thanh ghi. Tn thanh ghi khng cn ging trong datasheet cng c, a ch thanh ghi th bt buc phi ging. V d: khai bo PORTA: #l ocat e PORTA=0x80, sau khi khai bo ri, thay v g lnh di dng out put _a( 0xFF) ; , ta ch cn PORTA=0xFF; Nh vy r rng l tin v quen thuc vi ngi tng dng ASM. Nu cn, c th #l ocat e nhiu thanh ghi ca con PIC no , lu li vi tn 16F877A_r egs. h, t ln sau tr i, ch cn #i ncl ude <16F877A_r egs. h> l thoi mi tc ng n thanh ghi. Sau y l code v d n gin.
#i ncl ude <16F877A. h> #f uses HS, NOWDT, PUT, NOLVP, NODEBUG, NOBROWNOUT #use del ay( cl ock=20000000) //bt buc phi c Directive ny trc #use r s232( baud=115200, xmi t =PI N_C6, r cv=PI N_C7) //ri mi vit Directive ny. Directive ny thit lp PIC trong ch baud bao nhiu, chn xmit va rcv, c th c databits, stopbit,nhng t khi cn.
/* Khai bo bin*/ I nt I nput ; I nt num;
Voi d mai n ( voi d) { Num=123; Set _t r i s_c( 0x80) ; Pr i nt f ( / n/ r Hel l o Wor l d, t hi s i s Wonbi nbk f r omVI ETNAM) ; Pr i nt f ( / n/ r Thi s i s t he number %d, num) ; Pr i nt f ( / n/ r Type i n a key, j ust one key a t i me, man! ) ; Whi l e( 1) { I nput =Get c( ) ; / / wai t i ng f or a key i nput f r omPC, t hen assi gn i t t o I nput . Pr i nt f ( / n/ r You t yped %c, di dn t you?, i nput ) ; } }
Nu dng ngt nhn, ta khng cn ch trong loop, m c th lm vic khc.
#i ncl ude <16F877A. h> #f uses HS, NOWDT, PUT, NOLVP, NODEBUG, NOBROWNOUT Duy Thi giao tip PC vi PIC Trang 7 / 7 #use del ay( cl ock=20000000) #use r s232( baud=115200, xmi t =PI N_C6, r cv=PI N_C7)
I nt i nput ;
#I NT_RDA Voi d ngat _232( voi d) { I nput =get c( ) ; Pr i nt f ( / n/ r You t yped %c, di dn t you?, i nput ) ; }
Voi d mai n( voi d) { Set _t r i s_c( 0x80) ; Enabl e_i nt er r upt s( I NT_RDA) ; Enabl e_i nt er r upt s( GLOBAL) ; Whi l e( 1) { Do_Somet hi ng_el se( ) ; / / bl ah, bl ah, bl ah } }
Thng tin thm v cc hm, cc lnh h tr, c bit lnh printf() c th c k trong Help ca CCSC 3.249 (newest version).