Professional Documents
Culture Documents
[Year]
MC LC
I. MT VI NT CHUNG V 89C51
II. NHNG VN TRNG TM CA 89C51
III. NGN NG KEIL C CHO 89C51
IV. HNG DN S DNG KEIL C LP TRNH CHO 89C51
V. M PHNG MODUL NG DNG V CHNG TRNH MU
I. TM HIU V AVR
II. CU TRC LNH CA CODE VISION
III. HNG DN S DUNG LP TRNH AVR BNG CODE VISION
IV. MODUL NG DNG V CHNG TRNH M PHNG
Cc c im ca 8951 c tm tt nh sau :
8 KB EPROM bn trong.
128 Byte RAM ni.
4 Port xut /nhp I/O 8 bit.
Giao tip ni tip.
64 KB vng nh m ngoi
64 KB vng nh d liu ngoi.
X l Boolean (hot ng trn bit n).
210 v tr nh c th nh v bit.
4 s cho hot ng nhn hoc chia.
v S khi ic 89c51
v S chn ic 89c51
Port 1 l port IO trn cc chn 1-8. Cc chn c k hiu P1.0, P1.1, P1.2, c th
dng cho giao tip vi cc thit b ngoi nu cn. Port 1 khng c chc nng khc, v
vy chng ch c dng cho giao tip vi cc thit b bn ngoi.
Port 2 :
Cc ng tn hiu iu khin :
Ng tn hiu PSEN (Program store enable):
- PSEN l tn hiu ng ra chn 29 c tc dng cho php c b nh chng trnh
m rng thng c ni n chn 0E\ (output enable) ca Eprom cho php c cc
byte m lnh.
- Khi 8951 truy xut b nh bn ngoi, port 0 c chc nng l bus a ch v bus d liu
do phi tch cc ng d liu v a ch. Tn hiu ra ALE chn th 30 dng lm
tn hiu iu khin gii a hp cc ng a ch v d liu khi kt ni chng vi IC
cht.
- Tn hiu ra chn ALE l mt xung trong khong thi gian port 0 ng vai tr l a
ch thp nn cht a ch hon ton t ng.
Cc xung tn hiu ALE c tc bng 1/6 ln tn s dao ng trn chip v c th c
dng lm tn hiu clock cho cc phn khc ca h thng. Chn ALE c dng lm ng
vo xung lp trnh cho Eprom trong 8951.
Ng tn hiu EA\(External Access):
1. S vng nh
Thanh ghi B:
Thanh ghi B a ch F0H c dng cng vi thanh ghi A cho cc php ton nhn
chia. Lnh MUL AB s nhn nhng gi tr khng du 8 bit trong hai thanh ghi A v
B, ri tr v kt qu 16 bit trong A (byte cao) v B(byte thp). Lnh DIV AB ly A
chia B, kt qu nguyn t vo A, s d t vo B.
- Thanh ghi B c th c dng nh mt thanh ghi m trung gian a mc ch. N l
nhng bit nh v thng qua nhng a ch t F0HF7H.
Con tr Ngn xp SP (Stack Pointer) :
- Con tr ngn xp l mt thanh ghi 8 bit a ch 81H. N cha a ch ca byte d
liu hin hnh trn nh ngn xp. Cc lnh trn ngn xp bao gm cc lnh ct d liu
vo ngn xp (PUSH) v ly d liu ra khi Ngn xp (POP). Lnh ct d liu vo ngn
xp s lm tng SP trc khi ghi d liu v lnh ly ra khi ngn xp s lm gim SP.
Ngn xp ca 8031/8051 c gi trong RAM ni v gii hn cc a ch c th truy
xut bng a ch gin tip, chng l 128 byte u ca 8951.
- khi ng SP vi ngn xp bt u ti a ch 60H, cc lnh sau y c dng:
MOV SP , #5F
- Vi lnh trn th ngn xp ca 8951 ch c 32 byte v a ch cao nht ca RAM trn
chip l 7FH. S d gi tr 5FH c np vo SP v SP tng ln 60H trc khi ct byte d
liu.
- Khi Reset 8951, SP s mang gi tr mc nh l 07H v d liu u tin s c ct
vo nh ngn xp c a ch 08H. Nu phn mm ng dng khng khi ng SP
mt gi tr mi th bank thanh ghi1 c th c 2 v 3 s khng dng c v vng
RAM ny c dng lm ngn xp. Ngn xp c truy xut trc tip bng cc
lnh PUSH v POP lu tr tm thi v ly li d liu, hoc truy xut ngm bng
lnh gi chng trnh con ( ACALL, LCALL) v cc lnh tr v (RET, RETI)
lu tr gi tr ca b m chng trnh khi bt u thc hin chng trnh con v ly
li khi kt thc chng trnh con
Con tr d liu DPTR (Data Pointer):
-Con tr d liu (DPTR) c dng truy xut b nh ngoi l mt thanh ghi 16 bit
a ch 82H (DPL: byte thp) v 83H (DPH: byte cao). Ba lnh sau s ghi 55H vo
RAM ngoi a ch 1000H:
MOV A , #55H
MOV DPTR, #1000H
MOV @DPTR, A
Trng thi ca tt c cc thanh ghi trong 8951 sau khi reset h thng c tm tt nh
sau:
- Cc ngt ngoi xy ra khi c mt mc thp hoc cnh xung trn chn INT0 hoc
INT1 ca vi iu khin. y l chc nng chuyn i ca cc bit Port 3.(Port 3.2 v
Port 3.3).
Cc c to ngt ny l cc bit IE0 v IE1 trong TCON. Khi quyn iu khin chuyn
n ISR, c to ra ngt ch c xa nu ngt c tch cc bng cnh xung. Nu ngt
c tch cc theo mc, th ngun yu cu ngt bn ngoi s iu khin mc ca c
thay cho phn cng.
S la chn ngt tch cc mc thp hay tch cc cnh xung c lp trnh qua
cc bit IT0 v IT1 trong TCON. Nu IT1 = 0, ngt ngoi 1 c tc ng bng mc
thp chn IT1. Nu IT1 = 1 ngt ngoi 1 s c tc ng bng cnh xung. trong ch
ny, nu cc mu lin tip trn chn INT1 ch mc cao trong mt chu k v ch mc
thp trong chu k k, c yu cu ngt IE1 trong TCON c t ln 1, ri bit I yu cu
ngt.
Nu ngt ngoi c tc ng bng cnh xung th ngun bn ngoi phi gi chn tc
ng mc cao ti thiu mt chu k v gi n mc thp thm mt chu k na m
bo pht hin c cnh xung. Nu ngt ngoi c tc ng theo mc th ngun bn
ngoi phi gi tn hiu yu cu tc ng cho n khi ngt c yu cu c tht s to
ra v khng tc ng yu cu ngt trc khi ISR c hon tt . Nu khng mt ngt
khc s c lp li.
//Khai bo v nh ngha cc hm
void Hm1(void)
{
//Cc cu lnh
}
Khai bo bin:
2.2. Cc hm trong C
Trong ngn ng C ta thng ta thng dng cc loi hm sau:
Hm c tr v gi tr
Cu trc: Kiu gi tr hm tr v Tn hm (Danh sch cc bin truyn vo hm)
.
Else
{
//Cc cu lnh x l khi tt c cc iu kin trn u khng ng
}
Lnh la chn Switch ():
Cu trc: Switch (bin)
Vng lp While:
Cu trc: While (expresstion)
{
Statements
}
Cu trc: While(1) {}; to vng lp v tn rt hay dng trong lp trnh vi iu
khin, chng trnh chnh s c vit trong du {}.
Vng lp Do While:
Cu trc: Do statements While (condition);
Vng lp ny s thc hin cc cu lnh trc ri mi kim tra iu kin sau. V vy
cc cu lnh s c thc hin t nht l mt ln ngay c khi iu kin khng bao gi
c tha mn.
Vng lp for:
Cu trc: For (initialization; condition; increase)
{
statements;
}
Chc nng chnh ca vng lp for l lp li statements khi condition vn cn ng nh
trong vng lp while nhng trong lnh for c gi tr khi to (initialization) v c lnh tng
(increase) nn vng lp for s lp li cc cu lnh vi mt s ln xc nh trc.
Phn khi to v phn lnh tng c th b qua nhng phi c du chm phy (;) ngn
cch gia chng. V d chng ta c th vit for(;n<10;) hoc for(;n<10;n++).
Khi dng chng trinh Keil C ta s c giao din nh sau:(giao din c th khc nu bn
m ln u. y do mnh lm nhiu ln nn chng trnh s t load Project m mnh
m trc .)
Trong hp thoi ny hin th 1 lot cc hng sn xut 8951. Bn lp trnh cho con no th
chn hng , sau kch chut vo du + chn loi IC ca hng . y ta lp trnh
cho AT89C51 ca hng ATMEL nn ta chn nh bn di. Khi chon loi chip no th 1
bng bn phi s hin th cc tnh nng ca chip. Sau nhp OK. Khi c hi Copy
standard 8951 startup code to project and addfile to project th bn nn chn NO v nu
chon YES th cng chng c li g ngoi vic lm cho chng trnh ca bn nng thm m
thi.
Sau khi save file xong ta tin hnh add file.c vo Project. Trong ca s Project window click
vo du + ca th mc Taget 1 ri nhp phi vo Source group 1 chn Add file to Group
Source Group 1.
Sau khi vit code xong bn lu li nhng g thc hin. Sau bn tin hnh bin dch
chng trnh bng cch nhn phm F7 hay chn Project / Build Taget.
ledtam1 = ~P0;
ledtam2 = ~P1;
sck--;
}while (sck >0);
// Cac led bat dau tat don
sck = 16;
ledtam1 = 0;
ledtam2 = 0;
P0 = 0; //sang het
P1 = 0;
P2 = 0;
P3 = 0;
do
{
slx = 0;
led = 128; //tat 1 led
do
{
wait(8000);
P1 = (ledtam1|led);
P3 = (ledtam1|led);
led = led >>1;
slx++;
if (slx == sck) break;
}while (slx<9);
ledtam1 = P1;
ledtam2 = P0;
sck--;
}while (sck >0);
}
//Chng trnh chnh
void main(void)
{
for(;;)
{
ledchay();
sangdan();
sangdon();
}
}
//Hm delay
void delay(unsigned long x)
{
unsigned int i;
for(i=0;i<x;i++);
}
case 1:
GIO++;
if (GIO == 24) GIO = 0;
break;
case 2:
PHUT++;
if (PHUT == 60) PHUT = 0;
break;
case 3:
GIAY++;
if (GIAY == 60) GIAY = 0;
break;
}
}
RCK = 1;
RCK = 0;
P1 = HT[i];
delay(50);
P1 = 0xFF;
SERI_IN = 0;
}
}
0xFF,0xFD,0xFD,0x01,0xFD,0xFD, //T
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x07,0xDB,0xDD,0xDB,0x07, //A
0xFF,0x01,0xF7,0xEF,0XDF,0x01, //N
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xED,0xED,0xED,0xF3, //P
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x83,0x7D,0x7D,0x7D,0x83, //O
0xFF,0xFF,0xFF,0xFF,
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x83,0x7D,0x7D,0x7D,0x83, //O
0xFF,0xFF,0xFF,0xFF,
0xFF,0x83,0x7D,0x7D,0x7D,0xBB, //C
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x7D,0x01,0x7D, //I
0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xFB,0xF7,0xFB,0x01, //M
0xFF,0x7D,0x01,0x7D, //I
0xFF,0x01,0xF7,0xEF,0XDF,0x01, //N
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0xEF,0xD7,0xBB,0x7D, //K
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x83,0x7D,0x7D,0x7D,0x83, //O
0xFF,0x07,0xDB,0xDD,0xDB,0x07, //A
0xFF,0xFF,0xFF,0xFF,
0xEF,0x01,0x6D,0x7D,0x7D,0x83, //D
0xFF,0x7D,0x01,0x7D, //I
0xFF,0x01,0x6D,0x6D,0x6D,0x7D, //E
0xFF,0x01,0xF7,0xEF,0XDF,0x01, //N
0xFF,0xFF,0xEF,0xEF,0xEF,0xEF,0xFF,0xFF,
0xEF,0x01,0x6D,0x7D,0x7D,0x83, //D
0xFF,0x7D,0x01,0x7D, //I
0xFF,0x01,0x6D,0x6D,0x6D,0x7D, //E
0xFF,0x01,0xF7,0xEF,0XDF,0x01, //N
0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xFD,0x01,0xFD,0xFD, //T
0xFF,0x81,0x7F,0x7F,0x7F,0x81, //U
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xFD,0x01,0xFD,0xFD, //T
0xFF,0X01,0xEF,0xEF,0xEF,0x01, //H
0xFF,0x81,0x7F,0x7F,0x7F,0x81, //U
0xFF,0x83,0x7D,0x7D,0x7D,0xBB, //C
0xFF,0xFF,0xFF,0xFF,
0xFF,0xFD,0xFD,0x01,0xFD,0xFD, //T
0xFF,0x07,0xDB,0xDD,0xDB,0x07, //A
0xFF,0x01,0xED,0xED,0xED,0xF3, //P
0xFF,0xFF,0xFF,0xFF,
0xFF,0xC1,0xBF,0x7F,0xBF,0xC1, //V
0xFF,0x7D,0x01,0x7D, //I
0xFF,0xFF,0xFF,0xFF,
0xFF,0x39,0xD7,0xEF,0xD7,0x39, //X
0xFF,0x81,0x7F,0x7F,0x7F,0x81, //U
0xFF,0xFF,0xFF,0xFF,
0xFF,0x01,0x7F,0x7F,0x7F,0x7F, //L
0xFD,0xFB,0x07,0xFB,0xFD, //Y
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
//Ham delay
void delay(unsigned long time)
{
unsigned int i;
for(i=0;i<time;i++);
}
//Ham chinh
void main(void)
{
unsigned int count0,count1,count2,i,j,k;
for(;;)
{
OE = 0; //Cho phep cac IC 74HC595 hoat dong
MR = 0; //Reset he thong
MR = 1;
SCK = 0;
RCK = 0;
//RCK = 1;
count0 = 765;
RCK = 1;
RCK = 0;
P1 = MA[k];
delay(25);
P1 = 0xFF;
D_IN = 0;
}
}
}
}
}
#include <at89x51.h>
#include <string.h>
sfr LCDdata = 0xA0;
sbit BF = 0xA7;
sbit RS = P1^0;
sbit RW = P1^1;
sbit E = P1^2;
//Ham kiem tra xem LCD co san sang hay khong!
void kiemtra(void)
{
RS = 0; //Chon thanh ghi lenh
RW = 1; //Chon che do doc tu LCD
LCDdata = 0xFF;
while (BF)
{
E = 0;
E = 1;
}
}
//Ham delay
void delay(long time)
{
unsigned int i;
for (i=0;i<time;i++);
}
//Ham ghi lenh len LCD
void control(unsigned char x)
{
RS = 0;
RW = 0; //Chon che do ghi len LCD
LCDdata = x; //Ghi len LCD lenh co ma la x
E = 1;
E = 0; //Tao xung tren chan E de LCD chot du lieu lai
kiemtra(); //Kiem tra LCD co san sang khong
}
//Ham ghi 1 ki tu len LCD
void write(unsigned char a)
{
RS = 1; //Chon thanh ghi du lieu
RW = 0;
LCDdata = a;
E = 1;
E = 0;
kiemtra();
#include <at89x51.h>
#include <string.h>
#include <math.h>
//sfr adc = 0x90;
sfr LCDdata= 0xA0;
sbit BF = P2^7;
sbit RS = P3^0;
sbit RW = P3^1;
sbit E = P3^2;
sbit A = P3^3;
sbit ALE = P3^4;
sbit START = P3^5;
signed int adc0,adc1;
unsigned int dvi,chuc,tram,tam;
const unsigned char ma[] ="0123456789- ";
void kiemtra(void)
{
RS = 0; //Chn thanh ghi lnh
RW = 1; //Chn ch c t LCD
while (BF)
{
E = 1;
E = 0;
}
}
//Ham delay
void delay(long time)
{
unsigned int i;
for (i=0;i<time;i++);
}
//Ham ghi lenh len LCD
void control(unsigned char x)
{
RS = 0;
RW = 0; //Chn ch ghi ln LCD
LCDdata = x; //Ghi ln LCD lnh c m l x
E = 1;
E = 0; //To xung cht d liu trn LCD li
delay(70);
}
//Ham ghi 1 ki tu len LCD
void write(unsigned char a)
{
adc = P1;
adc = adc - 55;
if(adc >= 0)
{
dvi = adc%10;
tam = adc/10;
chuc = tam%10;
tram = tam/10;
if(tram == 0)
{
tram = 11;
if (chuc == 0) chuc = 11;
A = 0; //Chn knh 1
read_convert(adc1);
control(0xC8);
write(ma[tram]);
write(ma[chuc]);
write(ma[dvi]);
control(0x0C); //Tt du nhy ca con tr
}
}
Th h Pic u tin l Pic 1650 c pht trin bi Microelectronis Division thuc General-
Intrument
3. S Chn v c im
a- S chn:
b- c im:
PORT A
PORT B
PORT C
PORT D
PORT E
Khi b nh d liu
B nh chng trnh:
B nh d liu:
B nh d liu c chia thnh nhiu bank v cc thanh ghi c chc nng t bit.
Mi Bank c th m rng ln n a ch 7Fh
Thanh ghi c chc nng t bit nm nh c a ch thp ca mi Bank
Hai bit RP1RP0 chn Bnk
a- Ngt ca timer 0:
Ngt ca timer0 c kch hot khi thanh ghi TMR0 trn t FFh n 00h. Khi trn xy ra th
bit TMR0IF(INTCON<2>) ln mc 1.
b- Timer vi ngun xung clock bn ngoi:
Khi khng x dng b chia trc th ng vo xung clock bn ngoi ging nh ng ra b chia
trc. S ng b ha TOCKI vi cc xung clock bn trong c thc hin bng cch ly mu
ng ra b chia nhng chu k Q2 v Q4 bn trong. Do , n rt cn thit cho tocki trng
thi cao t nht 2 tosc v trng thi mc thp t nht 2 tosc.
c- B chia trc:
Ch c mt b chia c tc dng m n c quan h vi TIMER0 v WDT. Khi gn b chia trc
cho TIMER0 th s khng c b chia cho Watchdog Timer v ngc li. B chia trc th
khng th c ghi. Cc bit PSA v PS2:PS0(OPTION_REG<3:0>) xc nh b chia v t l
chia.
3. Cc thanh ghi:
Bit 7 Bit 0
Bit5 TOCS: TMR0 Clock Source Select bit(bit la chn ngun xung clock TMR0)
Bit4 TOSE: TMR0 Clock Source Select bit(bit la chn kiu tc ng cho TMR0)
Gi tr bit T l T l
TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
bit 7 bit 0
Bit6-5 RP0-RP1 : cc bit cha chn thanh ghi (dng da ch gin tip)
1 = khi kt qu bng 0
Phm vi ca bin:
Khi mun dich t file .C sang file .HEX ta nhp vo COMPILE / chn
COMPILE Hoc nhn F9. Trinh bin dch hin ca s sau l bin dich thnh
cng:
Chng trnh:
#include<16F877A.h>
#fuses NOWDT,PUT,NOPROTECT,NOLVP
#use delay(clock = 20000000)
#byte portb = 0x6//khai bao dia chi thanh ghi portb
#byte trisb = 0x86
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
Chng trnh:
#include <16F877A.H>
#include <KhaiBaoTGhi_16F877A.h>
#fuses NOWDT,NOPROTECT
#DEVICE 16F877*=16 ADC=8
#BYTE PORTA = 0x05
#BYTE TRISA = 0x85
#BYTE PORTB = 0x06
#BYTE TRISB = 0x86
#BYTE PORTC = 0x07
#BYTE TRISC = 0x87
void main()
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_b(0);
set_tris_c(0);
setup_adc_ports(AN0_AN1_VREF_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
// set_adc_channel(0);
// delay_ms(10);
while(1)
{
set_adc_channel(0);
delay_ms(10);
adc0 = read_adc();
output_B(adc0);
set_adc_channel(1);
delay_ms(10);
adc1 = read_adc();
output_C(adc1);
Chng trinh:
#include <16F877A.h>
#include<khaibaotghi_16f877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT,HS,NOLVP
#use delay(clock=1000000)
#use fast_io(b)
#use fast_io(d)
#use fast_io(a)
#bit start=portb.1
#bit tphuc=portb.2
#bit gphuc=portb.3
#bit tgio=portb.4
#bit ggio=portb.5
int16 count;
int8 giay,phuc,gio,dvgiay,chgiay,dvphuc,chphuc,dvgio,chgio,i;
const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//ma 7 doan
void nhex_bcd()
{
chgiay=giay/10;
dvgiay=giay%10;
chphuc=phuc/10;
dvphuc=phuc%10;
chgio=gio/10;
dvgio=gio%10;
}
void nhienthi()
{
i=0;
while(i<5)
{
output_high(pin_d0);
portc=dig[dvgiay]; //xuat ma ra port
delay_ms(1);
output_low(pin_d0);
output_high(pin_d1);
portc=dig[chgiay];
delay_ms(1);
output_low(pin_d1);
output_high(pin_d2);
portc=dig[dvphuc];
delay_ms(1);
output_low(pin_d2);
output_high(pin_d4);
portc=dig[dvgio];
delay_ms(1);
output_low(pin_d4);
output_high(pin_d5);
portc=dig[chgio];
delay_ms(1);
output_low(pin_d5);
i=i+1;
}
}
lap1:
if (start==0)
{
break;
}
nhex_bcd();
nhienthi();
}
}
void hex_bcd()
{
void hienthi()
{
i=0;
while(i<5)
{
output_high(pin_d0);
portc=dig[dvgiay];
delay_ms(1);
output_low(pin_d0);
output_high(pin_d1);
portc=dig[chgiay];
delay_ms(1);
output_low(pin_d1);
output_high(pin_d2);
portc=dig[dvphuc];
delay_ms(1);
output_low(pin_d2);
output_high(pin_d3);
portc=dig[chphuc];
delay_ms(1);
output_high(pin_d4);
portc=dig[dvgio];
delay_ms(1);
output_low(pin_d4);
output_high(pin_d5);
portc=dig[chgio];
delay_ms(1);
output_low(pin_d5);
i=i+1;
}
}
intcon=0xb0;
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
giay =0;
phuc=0;
gio=0;
while(true)
{
if(giay==60)
{
giay=0;
phuc=phuc+1;
}
if (phuc==60)
{
phuc=0;
gio=gio+1;
}
if (gio==24)
{
gio=0;
}
hex_bcd();
hienthi();
}
}
PHN C: LP TRNH AVR BNG PHN MN CODE VISION
I. TM HIU V AVR
AVR l tn ca ca 1 h vi iu khin do AtmeL sn xut (Atmel cng l nh
sn xut cc vi iu khin h 89C51 m bn c th tng nghe n).
Thanh ghi bn trong chip l thanh ghi c cu trc 8 bit.
RISC (Reduced Instruction Set Computer) l 1 kiu cu trc ph bin ca cc b
x l.
AVR c nhiu c tnh hn hn:c trong tnh ng dng (d s dng) v c bit l v
chc nng
Khi chng trnh phc vu ngt hoc chng trnh con th con tr PC c lu vo
ngn xp trong khi con tr ngn xp gim hai v tr. V con tr ngn xp s gim 1
khi thc hin lnh push. Ngc li khi thc hin lnh POP th con tr ngn xp s
tng 1 v khi thc hin lnh RET hoc RETI th con tr ngn xp s tng 2. Nh vy
con tr ngn xp cn c chng trnh t trc gi tr khi to ngn xp trc khi
mt chng trnh con c gi hoc cc ngt c cho php phc v. V gi tr
ngn xp t nht cng phi ln hn hoc bng 60H (0x60) v 5FH tr li l vng cc
thanh ghi.
Qun l ngt
Ngt l mt c ch cho php thit b ngoi vi bo cho CPU bit v tnh trng sn
xng cho i d liu ca mnh.V d:Khi b truyn nhn UART nhn c mt byte
n s bo cho CPU bit thng qua c RXC,hc khi n truyn c mt byte th
c TX c thit lp
V d:
char cSREG;
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
CLI();
EECR |= (1<<EEMWE); /* start EEPROM write */
EECR |= (1<<EEWE);
B nh d liu EEPROM
Tm li:
a d liu ra thanh ghi iu khin DDRxn t cho PORTx (hoc bit n trong
port) l u vo (xa thanh ghi DDRx hoc bit).
Sau kch hot in tr pull-up bng cch set thanh ghi PORTx ( bit).
Cui cng c d liu t a ch PINxn (trong x: l cng v n l bit).
B nh thi
Cc thanh ghi
n v m
Hnh 5.2. n v m
n v so snh ng ra
M t cc thanh ghi
Thanh ghi iu khin b nh thi/b m TCCR0
KIU D LIU:
-La chn:
-switch( ){
case:
Cc cu lnh;
};
>> Chip: chn loi chip mnh nh lp trnh, gi tr thch anh ngoi (mc trn mch)
Chng trnh:
#include <mega16.h>
#include <delay.h>
void main()
{
int i;
DDRA=0xff;
DDRB=0xff;
DDRC=0xff;
DDRD=0xff;
while(1)
{
PORTA=0X01; //sang dan portA
PORTB=0X00;
PORTC=0X00;
PORTD=0X00;
delay_ms(20);
for(i=0;i<7;i++)
{
PORTA=PORTA<<=1; //dich phai va luu ket qua
Chng trnh:
#include <mega8515.h>
int gio=0,phut=0,giay=0,dem=0;
void hienthi();
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
// dat truoc gia tri cho timer1
TCNT1H=0x3CEF >> 8;
TCNT1L=0x3CEF & 0xff;
dem++;
if(dem==20)
void hienthi()
{
int
i,j,ma7doan[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xb
f};
int tam[8];
tam[0]=giay%10;
//tam[1]=giay/10;
tam[1]=0;
tam[2]= 10;
tam[3]=phut%10;
tam[4]=phut/10;
tam[5]= 10;
tam[6]=gio%10;
tam[7]=gio/10;
PORTC=0x80;
for(i=0;i<8;i++)
{
Chng trnh:
#include <mega16.h>
#include <delay.h>
#define RS PORTA.0
#define RW PORTA.1
#define E PORTA.2
#define LCD PORTC
for(i=0;i<41;i++)
{ LCD=0xD5; //Chay ndung3 tu phai sang trai tren dong 4
ghi_lenh();
for(j=i;j<i+20;j++)
{
LCD=ndung3[j];
ghi_data();
};
delay_ms(5);
};
for(i=41;i>=0;i--)
{ LCD=0xD5; //Chay ndung3 tu trai sang phai tren dong 4
ghi_lenh();
for(j=i;j<i+20;j++)
{
LCD=ndung3[j];
ghi_data();
};
delay_ms(5);
};
for(i=0;i<=5;i++)
{ LCD=0xD3; //Nhap nhay ndung3 5lan
ghi_lenh();
for(j=0;j<20;j++)