Top Banner
Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng Biên son : Ks.Cao Vinh - 1 - Chương I: Gii thiu Mc ñích: . Giúp cho sinh viên làm quen vi vi ñiu khin mi ATMEGA32. . Tìm hiu cu trúc AVR. . Làm quen vi ngôn ng C. . Làm quen vi trình biên dch Codvision AVR. Yêu cu : Sinh viên cn phi nm ñưc: 1.các khái nim PINx,PORTx,DDRx. 2. các chân có chc năng ñc bit. 3. các tp lnh C ( if-else, while ,do-while ,swich-case). 4. to d án mi , to thư vin , s dng chc năng to code sn. S tit lên lp : 10 tit. Bn phân chia thi lưng: Stt Ni dung S tit 1 1.1 gii thiu vi ñiu khin ATmega32. 4 2 1.2 Tp lnh cu trúc C. 5 3 1.3 gii thiu trình biên dch Codevision 1 Trng tâm bài ging: Bt buc sinh viên phi nm ñưc các PORTx,PINx, DDRx.  Nm ñưc các chân ngt ngoài , chân ADC, c hân PWM, counter… Sinh viên phi nm ñưc tp lnh và cu trúc C. Sinh viên phi bit cách to Project mi trong trình biên dch Codevision. 1.1 Gii thiu vi ñiu khin ATMEGA32.
28

chuong1_lhu

Apr 05, 2018

Download

Documents

Linh Lê
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 1/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 1 -

Chương I: Gii thiu

Mc ñích:. Giúp cho sinh viên làm quen vi vi ñiu khin mi ATMEGA32.

. Tìm hiu cu trúc AVR.

. Làm quen vi ngôn ng C.

. Làm quen vi trình biên dch Codvision AVR.

Yêu cu :Sinh viên cn phi nm ñưc:

1.các khái nim PINx,PORTx,DDRx.2. các chân có chc năng ñc bit.3. các tp lnh C ( if-else, while ,do-while ,swich-case).4. to d án mi , to thư vin , s dng chc năng to code sn.

S tit lên lp : 10 tit.Bn phân chia thi lưng:

Stt Ni dung S tit1 1.1 gii thiu vi ñiu khin ATmega32. 42 1.2 Tp lnh và cu trúc C. 53 1.3 gii thiu trình biên dch Codevision 1

Trng tâm bài ging:•  Bt buc sinh viên phi nm ñưc các PORTx,PINx, DDRx.•   Nm ñưc các chân ngt ngoài , chân ADC, chân PWM, counter…•  Sinh viên phi nm ñưc tp lnh và cu trúc C.•  Sinh viên phi bit cách to Project mi trong trình biên dch

Codevision.

1.1 Gii thiu vi ñiu khin ATMEGA32.

Page 2: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 2/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 2 -

1.1.1  gii thiu:•  vi ñiu khin ATMEGA32 là loi vi ñiu khin do công ty

Atmel sn xut vi cu trúc RISC.•  Hot ñng lên ti 16MIPS (16 triu lnh trong 1 giây).•  Có 32kbyte flash b nh chương trình.•  Có 2kbyte Sram.•  Có 1kbyte eeprom.•   Np xóa 100.000 ln ñi vi eeprom .•   Np xóa 10.000 ln vi b nh flash.

1.1.2  Các chc năng ñc bit:•  Có 2 timer/counter 8 bit (0-255) có b chia timer.•  Có 1 timer/counter 16 bit(0-65535) có b chia.•  Có 1 b thi gian thc vi b dao ñng riêng bit.•  Có 1 input capture(bt gi ,ño ñ rng xung).•  Có 4 kênh Pwm( ñiu ch ñ rng xung).•  8 kênh ADC 8-10 bit.•  Có b watchdog timer .•  Chun giao tip I2C, Spi,USART.•  Có b dao ñng ni 1-2-4-8Mhz(không cn gn thch anh).•  ðin áp hot ñng 2.7v-5.5v.•  Có 21 ña ch phc v ngt trên chip ATMEGA32.

1.1.3  Các thanh ghi ñiu khin I/O.

Hình 1: 2 dng ñóng gói IC

Page 3: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 3/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 3 -

gm có 3 thanh ghi DDRx, PORTx,PINx.1.1.3.1 Thanh ghi hưng DDRx(x=A,B,C,D).

•  Thanh ghi này có chc năng ñiu khin hung xut hay nhpca chân ñiu khin.

•   Nu bít tương ng là 0 thì là hưng vào.•   Nu bit tương ng là 1 thì là hưng ra.

Vd1:•  DDRA.0 =0 thì cng A.0 này là ch là ngõ vào.•  DDRA.7=1 thì cng A.7 này là ngõ ra.

1.1.3.2  thanh ghi xut PORTx(x=A,B,C,D)•  Thanh ghi này có 2 chc năng . chc năng chính là xut ngõ

ra , chc năng th 2 là cho phép ñin tr kéo lên ni khi cng

ñiu khin là ngõ vào.•  ng dng là ñiu khin các ngõ ra như led ,lcd, ñng cơ …

Vd2 :•  PORTC.5 =1 thì trên Pc.5 là mc 1 khi DDRC.5=1.•  PORTC.5 =0 thì trên Pc.5 là mc 0 khi DDRC.5=1.•  PORTC.0 =1 thì trên Pc.0 là mc 1 khi DDRC.0=1.

1.1.3.3  thanh ghi nhp PINx(x=A,B,C,D)•  Thanh ghi này có chc năng nhn tín hiu ngõ vào .•  ng dng như là nút nhn , ñc các tín hiu adc , cm bin …

Vd3 :•  PORTD.0=PINC.0 thì trên chân PC.0 này bng mc gì thì

PD.0 bng mc ñy(chú ý là DDRC.0=0,DDRD.0=1,PORTC.0=1).

Câu hi hiu bài:Câu 1 : vi ñiu khin ATmega32 có my phn b nh.Câu 2 : vi ñiu khin ATmega32 có bao nhiêu b nh chương trình.Câu 3 : vi ñiu khin ATmega32 có bao nhiêu chân ñiu khin I/O.Câu 4 : có my timer , và nêu ñim ni bt ca nó.

Câu 5: thit b ngoi vi ca ATmega32 gm có nhng gì.Câu 6: hãy ñiu khin 4 led ñơn và 4 nút nhn trên cng PC.Câu 7: hãy cho bit trong 1 thi ñim 1 chân VðK có th va là ngõ vào

va là ngõ ra ñưc không?Câu 8: khi nào thì dùng PINx , khi nào dùng PORTx, và thanh ghi DDRx

dùng làm gì.Câu 9: trong ATMEGA32 có my kênh adc?

Page 4: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 4/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 4 -

Câu 10 : ng dng ca ADC dùng làm gì? , cho 5 ví d ng dng.Câu 11: ATMEGA32 có máy cái ngt ngoài , hày lit kê ra.Câu 12 : ATMEGA32 có my chân ñiu xung , chúng nm chân nào.Câu 13 : chc năng Input capture là gì? Hãy nêu ng dng ca nó.Câu 14 : I2C là chun giao tip gì? SPI và USART ging và khác nhau ch

nào hãy so sánh .Câu 15: ATMEGA32 và AT89Sxx có gì ging và khác , hãy so sánh chúng.

1.2  Tp lnh và cu trúc C:

1.2.1 KHAI BÁO BIN:

Type  Size (Bits)  Range  bit 1 0 , 1 bool, _Bool 8 0 , 1char 8 -128 to 127unsigned char 8 0 to 255signed char 8 -128 to 127int 16 -32768 to 32767short int 16 -32768 to 32767unsigned int 16 0 to 65535signed int 16 -32768 to 32767long int 32 -2147483648 to 2147483647unsigned long int 32 0 to 4294967295signed long int 32 -2147483648 to 2147483647float 32 ±1.175e-38 to ±3.402e38double 32 ±1.175e-38 to ±3.402e38

Ta có rt nhiu kiu khai báo bin , tùy ng dng mà ta s dng cho phù hp ñva tit kim b nh và tăng tc ñ s lý.

T khóa unsigned là không du .

1.2.2 ðNH NGHĨA :ðnh nghĩa có chc năng thay th cái gì ñó ñ tin cho ta thay ñi các ng

dng 1 cách nhanh chóng.T khóa “#define” dùng ñ ñnh nghĩa và cui dòng không có du “;”.

Vd: #define led1 PORTC.0

Page 5: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 5/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 5 -

#define data_led PORTC#define motor_left OCR1AL#define motor_right OCR1BL

#define un unsigned#define high(x) (((x) & 0xFF00) >> 8)

#define low(x) ((unsigned char)(x))

1.2.3 . Thay Th Kiu :ð thay th kiu ta có th dung t khóa “typedef”

Cu trúc : typedef kiu d liu ñt tên;Vd: typedef int so_nguyen;

Typedef char byte;Typedef double so_thuc;

Sau khi chúng ta ñt tên thì chúng ta có th s dng tên mi này mà ñt tên chokhai báo bin.

Vd: so_nguyen I,j,k,l;// lúc này thì các bin I,j,k,l là kiu s nguyên16bit.

1.2.4 .LNH IF .. ELSE IF…

Lnh if … else if là lnh kim tra ñiu kin .If <ñiu kin1>

{ ðúng ñiu kin 1 thì làm.}Else{ðiu kin 1 sai thì làm.}

……………………………….Chú ý nu thc hin 1 dòng lnh thì không cn du {}.Vd1:

Int i=10;If (i>10) i=i+1;Else i=i-1;

Vd2: int i=5,j;If (i==7) j=0;Else if(i==10) j=j+2;Else if(i==5) j=i+1;Else j=j+100;

1.2.4 .LNH WHILE(ñiu kin).Lnh while là lnh kim tra ñiu kin trưc ri mi thc thi khi lnh .

Page 6: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 6/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 6 -

 Nu ñiu kin còn ñúng thì khi lnh vn còn thc hin .Vd: while(1); có nghĩa là ñng yên ti ch.

While (1) {led=~led; delay_ms(100);}// chp tt led sau mi 100ms.

Vd: char i=0;While(i<250) {i++;delay_ms(100);led=i;}

Cách vit khác.Vd: char i=0;

While(i++<250) {delay_ms(100);led=i;}// kt ñk trưc ri tăng i sau.

Vd: char i=0;While(++i<250) {delay_ms(100);led=i;}// tăng i sau ñó kt ñk sau.

1.2.5 .LNH DO…WHILE(ñiu kin).Lnh do…while là lnh thc hin khi lnh trưc ri mi kim tra ñiukin sau .

 Nu ñiu kin còn ñúng thì khi lnh vn còn thc hin .

Vd: int char i=0;Do{ ++i; delay_ms(100);}while(i<200);

Vd: int char i=0;Do{ delay_ms(100); led=~led;}while(++i<200);

1.21.21.21.2.6. CÊu tróc rÏ nh¸nh.6. CÊu tróc rÏ nh¸nh.6. CÊu tróc rÏ nh¸nh.6. CÊu tróc rÏ nh¸nh ---- to¸n tö switch:to¸n tö switch:to¸n tö switch:to¸n tö switch:

L cÊu tróc t¹o nhiÒu nh¸nh ®Æc biÖt. Nã c¨n cø vo gi¸ trÞ mét biÓu

thøc nguyªn ®Ó ®Ó chän mét trong nhiÒu c¸ch nh¶y.CÊu tróc tæng qu¸t cña nã l :

switch ( biÓu thøc nguyªn )

{

case n1

Page 7: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 7/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 7 -

khèi lÖnh 1

case n2

khèi lÖnh 2

.......case nk

khèi lÖnh k

[ default

khèi lÖnh k+1 ]

}

Víi ni l c¸c sè nguyªn, h»ng ký tù hoÆc biÓu thøc h»ng. C¸c ni cÇn

cã gi¸ trÞ kh¸c nhau. §o¹n ch−¬ng tr×nh n»m gi÷a c¸c dÊu { } gäi l th©ncña to¸n tö switch.

default l mét thnh phÇn kh«ng b¾t buéc ph¶i cã trong th©n cña

switch.

Sù ho¹t ®éng cña to¸n tö switch phô thuéc vo gi¸ trÞ cña biÓu thøc

viÕt trong dÊu ngoÆc ( ) nh− sau :

Khi gi¸ trÞ cña biÓu thøc ny b»ng ni, m¸y sÏ nh¶y tíi c¸c c©u lÖnh

cã nh·n l case ni.

Khi gi¸ trÞ biÓu thøc kh¸c tÊt c¶ c¸c ni th× c¸ch lm viÖc cña m¸y l¹i

phô thuéc vo sù cã mÆt hay kh«ng cña lÖnh default nh− sau :

Khi cã default m¸y sÏ nh¶y tíi c©u lÖnh sau nh·n default.

Khi kh«ng cã default m¸y sÏ nh¶y ra khái cÊu tróc switch.

Chó ý : Chó ý : Chó ý : Chó ý : 

M¸y sÏ nh¶y ra khái to¸n tö switch khi nã gÆp c©u lÖnh break hoÆc

dÊu ngoÆc nhän ®ãng cuèi cïng cña th©n switch. Ta còng cã thÓ dïng c©u

lÖnh goto trong th©n cña to¸n tö switch ®Ó nh¶y tíi mét c©u lÖnh bÊt kú

bªn ngoi switch.

Page 8: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 8/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 8 -

Khi to¸n tö switch n»m trong th©n mét hm no ®ã th× ta cã thÓ sö 

dông c©u lÖnh return trong th©n cña switch ®Ó ra khái hm ny ( lÖnh

return sÏ ®Ò cËp sau ).

Khi m¸y nh¶y tíi mét c©u lÖnh no ®ã th× sù ho¹t ®éng tiÕp theo cñanã sÏ phô thuéc vo c¸c c©u lÖnh ®øng sau c©u lÖnh ny. Nh− vËy nÕu

m¸y nh¶y tíi c©u lÖnh cã nh·n case ni th× nã cã thÓ thùc hiÖn tÊt c¶ c¸c

c©u lÖnh sau ®ã cho tíi khi no gÆp c©u lÖnh break, goto hoÆc return. Nãi

c¸ch kh¸c, m¸y cã thÓ ®i tõ nhãm lÖnh thuéc case ni sang nhãm lÖnh

thuéc case thø ni+1. NÕu mçi nhãm lÖnh ®−îc kÕt thóc b»ng break th× to¸n

tö switch sÏ thùc hiÖn chØ mét trong c¸c nhãm lÖnh ny.

VÝ dô : VÝ dô : VÝ dô : VÝ dô : 

LËp ch−¬ng tr×nh ph©n lo¹i häc sinh theo ®iÓm sö dông cÊu tróc

switch :

#include "stdio.h"

main()

{

int diem;

tt: printf("\nVao du lieu :");

printf("\n Diem =");

scanf("%d",&diem);

switch (diem)

{

case 0:

case 1:

case 2:

case 3:printf("Kem\n");break;

case 4:printf("Yeu\n");break;

case 5:

Page 9: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 9/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 9 -

case 6:printf("Trung binh\n");break;

case 7:

case 8:printf("Kha\n");break;

case 9:case 10:printf("Gioi\n");break;

default:printf(Vao sai\n);

}

printf("Tiep tuc 1, dung 0 :")

scanf("%d",&diem);

if (diem==1) goto tt;

getch();

return;

}

1.21.21.21.2.7 . CÊu tróc lÆp víi to¸n tö for :.7 . CÊu tróc lÆp víi to¸n tö for :.7 . CÊu tróc lÆp víi to¸n tö for :.7 . CÊu tróc lÆp víi to¸n tö for :

To¸n tö for dïng ®Ó x©y dùng cÊu tróc lÆp cã d¹ng sau :

for ( biÓu thøc 1; biÓu thøc 2; biÓu thøc 3)

LÖnh hoÆc khèi lÖnh ;

To¸n tö for gåm ba biÓu thøc v th©n for. Th©n for l mét c©u lÖnh hoÆc mét khèi

lÖnh viÕt sau tõ kho¸ for. BÊt kú biÓu thøc no trong ba biÓu thøc trªn cã thÓ v¾ng mÆt

nh−ng ph¶i gi÷ dÊu ; .

Th«ng th−êng biÓu thøc 1 l to¸n tö g¸n ®Ó t¹o gi¸ trÞ ban ®Çu cho biÕn ®iÒu

khiÓn, biÓu thøc 2 l mét quan hÖ logic biÓu thÞ ®iÒu kiÖn ®Ó tiÕp tôc chu tr×nh, biÓu thøc

ba l mét to¸n tö g¸n dïng ®Ó thay ®æi gi¸ trÞ biÕn ®iÒu khiÓn.

Ho¹t ®éng cña to¸n tö for :Ho¹t ®éng cña to¸n tö for :Ho¹t ®éng cña to¸n tö for :Ho¹t ®éng cña to¸n tö for :

To¸n tö for ho¹t ®éng theo c¸c b−íc sau :

X¸c ®Þnh biÓu thøc 1

X¸c ®Þnh biÓu thøc 2

Tuú thuéc vo tÝnh ®óng sai cña biÓu thøc 2 ®Ó m¸y lùa chän mét trong

hai nh¸nh :

Page 10: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 10/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 10 -

NÕu biÓu thøc hai cã gi¸ trÞ 0 ( sai ), m¸y sÏ ra khái for v chuyÓn tíi c©u

lÖnh sau th©n for.

NÕu biÓu thøc hai cã gi¸ trÞ kh¸c 0 ( ®óng ), m¸y sÏ thùc hiÖn c¸c c©u

lÖnh trong th©n for.

TÝnh biÓu thøc 3, sau ®ã quay l¹i b−íc 2 ®Ó b¾t ®Çu mét vßng míi cña chu tr×nh.

Chó ý Chó ý Chó ý Chó ý : :: : 

NÕu biÓu thøc 2 v¾ng mÆt th× nã lu«n ®−îc xem l ®óng. Trong tr−êng hîp ny

viÖc ra khái chu tr×nh for cÇn ph¶i ®−îc thùc hiÖn nhê c¸c lÖnh break, goto hoÆc return

viÕt trong th©n chu tr×nh.

Trong dÊu ngoÆc trßn sau tõ kho¸ for gåm ba biÓu thøc ph©n c¸ch nhau bëi dÊu;.

Trong mçi biÓu thøc kh«ng nh÷ng cã thÓ viÕt mét biÓu thøc m cã quyÒn viÕt mét d·y

biÓu thøc ph©n c¸ch nhau bëi dÊu ph¶y. Khi ®ã c¸c biÓu thøc trong mçi phÇn ®−îc x¸c

®Þnh tõ tr¸i sang ph¶i. TÝnh ®óng sai cña d·y biÓu thøc ®−îc tÝnh l tÝnh ®óng sai cña

biÓu thøc cuèi cïng trong d·y ny.

Trong th©n cña for ta cã thÓ dïng thªm c¸c to¸n tö for kh¸c, v× thÕ ta cã thÓ x©y

dùng c¸c to¸n tö for lång nhau.

Khi gÆp c©u lÖnh break trong th©n for, m¸y ra sÏ ra khái to¸n tö for s©u nhÊt

chøa c©u lÖnh ny. Trong th©n for còng cã thÓ sö dông to¸n tö goto ®Ó nh¶y ®Õn mét vÝ 

trÝ mong muèn bÊt kú.

VÝ dô 1:VÝ dô 1:VÝ dô 1:VÝ dô 1:

NhËp mét d·y sè råi ®¶o ng−îc thø tù cña nã.

C¸ch 1:C¸ch 1:C¸ch 1:C¸ch 1:

#include “stdio.h”

float x[]={1.3,2.5,7.98,56.9,7.23};

int n=sizeof(x)/sizeof(float);

main()

{

int i,j;

float c;

for (i=0,j=n-1;i<j;++i,--j)

Page 11: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 11/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 11 -

{

c=x[i];x[i]=x[j];x[j]=c;

}

fprintf(stdprn,“\n Day so dao la \n\n”);

for (i=0;i<n;++i)fprintf(stdprn,“%8.2f”,x[i]);

}

C¸ch 2 :C¸ch 2 :C¸ch 2 :C¸ch 2 :

#include “stdio.h”

float x[]={1.3,2.5,7.98,56.9,7.23};

int n=sizeof(x)/sizeof(float);

main()

{

int i,j;

float c;

for (i=0,j=n-1;i<j;c=x[i],x[i]=x[j],x[j]=c,++i,--j)

fprintf(stdprn,“\n Day so dao la \n\n”);

for (i=0;++i<n;)

fprintf(stdprn,“%8.2f”,x[i]);

}

C¸ch 3 :C¸ch 3 :C¸ch 3 :C¸ch 3 :

#include “stdio.h”

float x[]={1.3,2.5,7.98,56.9,7.23};

int n=sizeof(x)/sizeof(float);

main()

{

int i=0,j=n-1;

float c;

for ( ; ; )

{

c=x[i];x[i]=x[j];x[j]=c;

Page 12: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 12/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 12 -

if (++i>--j) break;

}

fprintf(stdprn,“\n Day so dao la \n\n”);

for (i=-1;i++<n-1; fprintf(stdprn,“%8.2f”,x[i]));

}

VÝ dô 2:VÝ dô 2:VÝ dô 2:VÝ dô 2:

TÝnh tÝch hai ma trËn mxn v nxp.

#include "stdio.h"

float x[3][2],y[2][4],z[3][4],c;

main()

{

int i,j;

printf("\n nhap gia tri cho ma tran X ");

for (i=0;i<=2;++i)

for (j=0;j<=1;++j)

{

printf("\n x[%d][%d]=",i,j);

scanf("%f",&c);

x[i][j]=c;

}

printf("\n nhap gia tri cho ma tran Y ");

for (i=0;i<=1;++i)

for (j=0;j<=3;++j)

{

printf("\n y[%d][%d]=",i,j);

scanf("%f",&c);

y[i][j]=c;

}

for (i=0;i<=3;++i)

for (j=0;j<=4;++j)

z[i][j]

Page 13: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 13/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 13 -

1.2.81.2.81.2.81.2.8 C©u lÖnh break :C©u lÖnh break :C©u lÖnh break :C©u lÖnh break : 

C©u lÖnh break cho phÐp ra khái c¸c chu tr×nh víi c¸c to¸n tö for, while v

switch. Khi cã nhiÒu chu tr×nh lång nhau, c©u lÖnh break sÏ ®−a m¸y ra khái chu tr×nh

bªn trong nhÊt chøa nã kh«ng cÇn ®iÒu kiÖn g×. Mäi c©u lÖnh break cã thÓ thay b»ng c©u

lÖnh goto víi nh·n thÝch hîp.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

BiÕt sè nguyªn d−¬ng n sÏ l sè nguyªn tè nÕu nã kh«ng chia hÕt cho c¸c sè 

nguyªn trong kho¶ng tõ 2 ®Õn c¨n bËc hai cña n. ViÕt ®o¹n ch−¬ng tr×nh ®äc vo sè 

nguyªn d−¬ng n, xem n cã l sè nguyªn tè.

# include "stdio.h"

# include "math.h"

unsigned int n;

main()

{

int i,nt=1;

printf("\n cho n=");

scanf("%d",&n);

for (i=2;i<=sqrt(n);++i)

if ((n % i)==0)

{

nt=0;

break;

}

if (nt)

printf("\n %d la so nguyen to",n);

else

printf("\n %d khong la so nguyen to",n);

}

1.2.91.2.91.2.91.2.9 C©u lÖnh continueC©u lÖnh continueC©u lÖnh continueC©u lÖnh continue ::::

Tr¸i víi c©u lÖnh break, lÖnh continue dïng ®Ó b¾t ®Çu mét vßng míi

cña chu tr×nh chøa nã. Trong while v do while, lÖnh continue chuyÓn ®iÒu

Page 14: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 14/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 14 -

khiÓn vÒ thùc hiÖn ngay phÇn kiÓm tra, cßn trong for ®iÒu khiÓn ®−îc

chuyÓn vÒ b−íc khëi ®Çu l¹i ( tøc l b−íc : tÝnh biÓu thøc 3, sau ®ã quay l¹i

b−íc 2 ®Ó b¾t ®Çu mét vßng míi cña chu tr×nh).

Chó ý :Chó ý :Chó ý :Chó ý :

LÖnh continue chØ ¸p dông cho chu tr×nh chø kh«ng ¸p dông cho

switch.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

ViÕt ch−¬ng tr×nh ®Ó tõ mét nhËp mét ma trËn a sau ®ã :

TÝnh tæng c¸c phÇn tö d−¬ng cña a.X¸c ®Þnh sè phÇn tö d−¬ng cña a.

T×m cùc ®¹i trong c¸c phÇn tö d−¬ng cña a.

#include "stdio.h"

float a[3[4];

main()

{

int i,j,soptd=0;

float tongduong=0,cucdai=0,phu;

for (i=0;i<3;++i)

for (j=0;i<4;++j)

{

printf("\n a[%d][%d]=",i,j );

scanf("%f",&phu);

a[i][j]=phu;

if (a[i][j]<=0) continue;

tongduong+=a[i][j];

if (cucdai<a[i][j]) cucdai=a[i][j];

Page 15: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 15/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 15 -

++soptd;

}

printf("\n So phan tu duong la : %d",soptd);

printf("\n Tong cac phan tu duong la : %8.2f",tongduong);printf("\n Cuc dai phan tu duong la : %8.2f",cucdai);

}

1.2.10 HàmMét ch−¬ng tr×nh viÕt trong ng«n ng÷ C l mét d·y c¸c hm, trong ®ã cã mét hm

chÝnh ( hm main() ). Hm chia c¸c bi to¸n lín thnh c¸c c«ng viÖc nhá h¬n, gióp thùc

hiÖn nh÷ng c«ng viÖc lÆp l¹i no ®ã mét c¸ch nhanh chãng m kh«ng ph¶i viÕt l¹i ®o¹n

ch−¬ng tr×nh. Thø tù c¸c hm trong ch−¬ng tr×nh l bÊt kú, song ch−¬ng tr×nh bao giê

còng ®i thùc hiÖn tõ hm main().

1.2.10.11.2.10.11.2.10.11.2.10.1 C¬ së :C¬ së :C¬ së :C¬ së :

Hm cã thÓ xem l mét ®¬n vÞ ®éc lËp cña ch−¬ng tr×nh. C¸c hm cã vai trß

ngang nhau, v× vËy kh«ng cã phÐp x©y dùng mét hm bªn trong c¸c hm kh¸c.

X©y dùng mét hm bao gåm: khai b¸o kiÓu hm, ®Æt tªn hm, khai b¸o c¸c ®èi

v ®−a ra c©u lÖnh cÇn thiÕt ®Ó thùc hiÖn yªu cÇu ®Ò ra cho hm. Mét hm ®−îc viÕt

theo mÉu sau :

type tªn hm ( khai b¸o c¸c ®èi )

{

Khai b¸o c¸c biÕn côc bé

C¸c c©u lÖnh

[return[biÓu thøc];]

}

Dßng tiªu ®Ò :Dßng tiªu ®Ò :Dßng tiªu ®Ò :Dßng tiªu ®Ò :

Trong dßng ®Çu tiªn cña hm chøa c¸c th«ng tin vÒ : kiÓu hm, tªn hm, kiÓu v

tªn mçi ®èi.

Page 16: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 16/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 16 -

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

float max3s(float a, float b, float c)

khai b¸o c¸c ®èi cã d¹ng :

KiÓu ®èi 1 tªn ®èi 1, kiÓu ®èi 2 tªn ®èi 2,..., kiÓu ®èi n tªn ®èi n

Th©n hm :Th©n hm :Th©n hm :Th©n hm :

Sau dßng tiªu ®Ò l th©n hm. Th©n hm l néi dung chÝnh cña hm b¾t ®Çu v

kÕt thóc b»ng c¸c dÊu { }.

Trong th©n hm chøa c¸c c©u lÖnh cÇn thiÕt ®Ó thùc hiÖn mét yªu cÇu no ®ã ®·

®Ò ra cho hm.

Th©n hm cã thÓ sö dông mét c©u lÖnh return, cã thÓ dïng nhiÒu c©u lÖnh return

ë c¸c chç kh¸c nhau, v còng cã thÓ kh«ng sö dông c©u lÖnh ny.

D¹ng tæng qu¸t cña nã l :

return [biÓu thøc];

Gi¸ trÞ cña biÓu thøc trong c©u lÖnh return sÏ ®−îc g¸n cho hm.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

XÐt bi to¸n : T×m gi¸ trÞ lín nhÊt cña ba sè m gi¸ trÞ cña chóng ®−îc ®−a vo

bn phÝm.

X©y dùng ch−¬ng tr×nh v tæ chøc thnh hai hm : Hm main() v hm max3s.

NhiÖm vô cña hm max3s l tÝnh gi¸ trÞ lín nhÊt cña ba sè ®äc vo, gi¶ sö l a,b,c.

NhiÖm vô cña hm main() l ®äc ba gi¸ trÞ vo tõ bn phÝm, råi dïng hm max3s ®Ó tÝnh

nh− trªn, råi ®−a kÕt qu¶ ra mn h×nh.

Ch−¬ng tr×nh ®−îc viÕt nh− sau :

#include "stdio.h"

float max3s(float a,float b,float c ); /* Nguyªn mÉu hm*/

main()

{

float x,y,z;

printf("\n Vao ba so x,y,z:");

scanf("%f%f%f",&x&y&z);

Page 17: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 17/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 17 -

printf("\n Max cua ba so x=%8.2f y=%8.2f z=%8.2f la : %8.2f",

x,y,z,max3s(x,y,z));

} /* KÕt thóc hm main*/

float max3s(float a,float b,float c){

float max;

max=a;

if (max<b) max=b;

if (max<c) max=c;

return(max);

} /* KÕt thóc hm max3s*/

Quy t¾c ho¹t ®éng cña hm :Quy t¾c ho¹t ®éng cña hm :Quy t¾c ho¹t ®éng cña hm :Quy t¾c ho¹t ®éng cña hm :

Mét c¸ch tæng qu¸t lêi gäi hm cã d¹ng sau :

tªn hm ([Danh s¸ch c¸c tham sè thùc])

Sè c¸c tham sè thùc tÕ thay vo trong danh s¸ch c¸c ®èi ph¶i b»ng sè tham sè 

h×nh thøc v lÇn l−ît chóng cã kiÓu t−¬ng øng víi nhau.

Khi gÆp mét lêi gäi hm th× nã sÏ b¾t ®Çu ®−îc thùc hiÖn. Nãi c¸ch kh¸c, khi m¸y

gÆp lêi gäi hm ë mét vÞ trÝ no ®ã trong ch−¬ng tr×nh, m¸y sÏ t¹m dêi chç ®ã v chuyÓn

®Õn hm t−¬ng øng. Qu¸ tr×nh ®ã diÔn ra theo tr×nh tù sau :

CÊp ph¸t bé nhí cho c¸c biÕn côc bé.

G¸n gi¸ trÞ cña c¸c tham sè thùc cho c¸c ®èi t−¬ng øng.

Thùc hiÖn c¸c c©u lÖnh trong th©n hm.

Khi gÆp c©u lÖnh return hoÆc dÊu } cuèi cïng cña th©n hm th× m¸y sÏ xo¸ c¸c

®èi, biÕn côc bé v ra khái hm.

NÕu trë vÒ tõ mét c©u lÖnh return cã chøa biÓu thøc th× gi¸ trÞ cña biÓu thøc ®−îc

g¸n cho hm. Gi¸ trÞ cña hm sÏ ®−îc sö dông trong c¸c biÓu thøc chøa nã.

C¸c tham sè thùc, c¸c ®èi v biÕn côcC¸c tham sè thùc, c¸c ®èi v biÕn côcC¸c tham sè thùc, c¸c ®èi v biÕn côcC¸c tham sè thùc, c¸c ®èi v biÕn côc bé :bé :bé :bé :

Do ®èi v biÕn côc bé ®Òu cã ph¹m vi ho¹t ®éng trong cïng mét hm nªn ®èi v

biÕn côc bé cÇn cã tªn kh¸c nhau.

Page 18: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 18/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 18 -

§èi v biÕn côc bé ®Òu l c¸c biÕn tù ®éng. Chóng ®−îc cÊp ph¸t bé nhí khi

hm ®−îc xÐt ®Õn v bÞ xo¸ khi ra khái hm nªn ta kh«ng thÓ mang gi¸ trÞ cña ®èi ra

khái hm.

§èi v biÕn côc bé cã thÓ trïng tªn víi c¸c ®¹i l−îng ngoi hm m kh«ng g©y ra

nhÇm lÉn no.Khi mét hm ®−îc gäi tíi, viÖc ®Çu tiªn l gi¸ trÞ cña c¸c tham sè thùc ®−îc g¸n

cho c¸c ®èi ( trong vÝ dô trªn hm max3s, c¸c tham sè thùc l x,y,z, c¸c ®èi t−¬ng øng l

a,b,c ). Nh− vËy c¸c ®èi chÝnh l c¸c b¶n sao cña c¸c tham sè thùc. Hm chØ lm viÖc

trªn c¸c ®èi.

C¸c ®èi cã thÓ bÞ biÕn ®æi trong th©n hm, cßn c¸c tham sè thùc th× kh«ng bÞ thay

®æi.

Chó ý :Chó ý :Chó ý :Chó ý :

Khi hm khai b¸o kh«ng cã kiÓu ë tr−íc nã th× nã ®−îc mÆc ®Þnh l kiÓu int.

Kh«ng nhÊt thiÕt ph¶i khai b¸o nguyªn mÉu hm. Nh−ng nãi chung nªn cã v× nã

cho phÐp ch−¬ng tr×nh biªn dÞch ph¸t hiÖn lçi khi gäi hm hay tù ®éng viÖc chuyÓn

d¹ng.

Nguyªn mÉu cña hm thùc chÊt l dßng ®Çu tiªn cña hm thªm vo dÊu ;. Tuy

nhiªn trong nguyªn mÉu cã thÓ bá tªn c¸c ®èi.

Hm th−êng cã mét vi ®èi. VÝ dô nh− hm max3s cã ba ®èi l a,b,c. c¶ ba ®èi

ny ®Òu cã gi¸ trÞ float. Tuy nhiªn, còng cã hm kh«ng ®èi nh− hm main.

Hm th−êng cho ta mét gi¸ trÞ no ®ã. LÏ dÜ nhiªn gi¸ trÞ cña hm phô thuéc vo

gi¸ trÞ c¸c ®èi.

1.2.101.2.101.2.101.2.10.2. Hm kh«ng cho c¸c gi¸ trÞ :.2. Hm kh«ng cho c¸c gi¸ trÞ :.2. Hm kh«ng cho c¸c gi¸ trÞ :.2. Hm kh«ng cho c¸c gi¸ trÞ :

CCCC¸c hm kh«ng cho gi¸ trÞ gièng nh− thñ tôc ( procedure ) trong ng«n ng÷ lËp

tr×nh PASCAL. Trong tr−êng hîp ny, kiÓu cña nã l void.

VÝ dô hm t×m gi¸ trÞ max trong ba sè l max3s ë trªn cã thÓ ®−îc viÕt thnh thñ

tôc hiÓn thÞ sè cùc ®¹i trong ba sè nh− sau :

void htmax3s(float a, float b, float c)

{

float max;

max=a;

Page 19: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 19/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 19 -

if (max<b) max=b;

if (max<c) max=c;

}

Lóc ny, trong hm main ta gäi hm htmax3s b»ng c©u lÖnh :

htmax3s(x,y,z);

1.2.101.2.101.2.101.2.10.3..3..3..3. Hm ®Ö qui :Hm ®Ö qui :Hm ®Ö qui :Hm ®Ö qui :

1.2.10.3.11.2.10.3.11.2.10.3.11.2.10.3.1. Më ®Çu :. Më ®Çu :. Më ®Çu :. Më ®Çu :

C kh«ng nh÷ng cho phÐp tõ hm ny gäi tíi hm kh¸c, m nã cßn cho phÐp tõ 

mét ®iÓm trong th©n cña mét hm gäi tíi chÝnh hm ®ã. Hm nh− vËy gäi l hm ®Ö qui.

Khi hm gäi ®Ö qui ®Õn chÝnh nã, th× mçi lÇn gäi m¸y sÏ t¹o ra mét tËp c¸c biÕn

côc bé míi hon ton ®éc lËp víi tËp c¸c biÕn côc bé ®· ®−îc t¹o ra trong c¸c lÇn gäi

tr−íc.

§Ó minh ho¹ chi tiÕt nh÷ng ®iÒu trªn, ta xÐt mét vÝ dô vÒ tÝnh giai thõa cña sè 

nguyªn d−¬ng n. Khi kh«ng dïng ph−¬ng ph¸p ®Ö qui hm cã thÓ ®−îc viÕt nh− sau :

long int gt(int n) /* TÝnh n! víi n>=0*/

{

long int gtphu=1;

int i;

for (i=1;i<=n;++i)

gtphu*=i;

return s;

}

Ta nhËn thÊy r»ng n! cã thÓ tÝnh theo c«ng thøc truy håi sau :

n!=1 nÕu n=0

n!=n*(n-1)! nÕu n>0

Hm tÝnh n! theo ph−¬ng ph¸p ®Ö qui cã thÓ ®−îc viÕt nh− sau :

long int gtdq(int n)

{

if (n==0 || n==1)

return 1;

else

Page 20: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 20/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 20 -

return(n*gtdq(n-1));

}

Ta ®i gi¶i thÝch ho¹t ®éng cña hm ®Ö qui khi sö dông trong hm main d−íi ®©y :

#include "stdio.h"

main(){

printf("\n 3!=%d",gtdq(3));

}

LÇn gäi ®Çu tiªn tíi hm gtdq ®−îc thùc hiÖn tõ hm main(). M¸y sÏ t¹o ra mét

tËp c¸c biÕn tù ®éng cña hm gtdq. TËp ny chØ gåm c¸c ®èi n. Ta gäi ®èi n ®−îc t¹o ra

lÇn thø nhÊt l n thø nhÊt. Gi¸ trÞ cña tham sè thùc ( sè 3 ) ®−îc g¸n cho n thø nhÊt. Lóc

ny biÕn n trong th©n hm ®−îc xem l n thø nhÊt. Do n thø nhÊt cã gi¸ trÞ b»ng 3 nªn

®iÒu kiÖn trong to¸n tö if l sai v do ®ã m¸y sÏ lùa chän c©u lÖnh else. Theo c©u lÖnh

ny, m¸y sÏ tÝnh gi¸ trÞ biÓu thøc :

n*gtdq(n-1) (*)

§Ó tÝnh biÓu thøc trªn, m¸y cÇn gäi chÝnh hm gtdq v× thÕ lÇn gäi thø hai sÏ thùc

hiÖn. M¸y sÏ t¹o ra ®èi n míi, ta gäi ®ã l n thø hai. Gi¸ trÞ cña n-1 ë ®©y l¹i l ®èi cña

hm , ®−îc truyÒn cho hm v hiÓu l n thø hai, do vËy n thø hai cã gi¸ trÞ l 2. B©y giê,

do n thø hai vÉn ch−a tho¶ m·n ®iÒu kiÖn if nªn m¸y l¹i tiÕp tôc tÝnh biÓu thøc :

n*gtdq(n-1) (**)

BiÓu thøc trªn l¹i gäi hm gtdq lÇn thø ba. M¸y l¹i t¹o ra ®èi n lÇn thø ba v ë ®©y

n thø ba cã gi¸ trÞ b»ng 1. §èi n=1 thø ba l¹i ®−îc truyÒn cho hm, lóc ny ®iÒu kiÖn

trong lÖnh if ®−îc tho¶ m·n, m¸y ®i thùc hiÖn c©u lÖnh :

return 1=gtdq(1) (***)

B¾t ®Çu tõ ®©y, m¸y sÏ thùc hiÖn ba lÇn ra khái hm gtdq. LÇn ra khái hm thø 

nhÊt øng víi lÇn vo thø ba. KÕt qu¶ l ®èi n thø ba ®−îc gi¶i phãng, hm gtdq(1) cho

gi¸ trÞ l 1 v m¸y trë vÒ xÐt gi¸ trÞ biÓu thøc

n*gtdq(1) ®©y l kÕt qu¶ cña (**)

ë ®©y, n l n thø hai v cã gi¸ trÞ b»ng 2. Theo c©u lÖnh return, m¸y sÏ thùc hiÖn lÇn ra

khái hm lÇn thø hai, ®èi n thø hai sÏ ®−îc gi¶i phãng, kÕt qu¶ l biÓu thøc trong (**) cã

gi¸ trÞ l 2.1. Sau ®ã m¸y trë vÒ biÓu thøc (*) lóc ny l :

n*gtdq(2)=n*2*1

Page 21: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 21/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 21 -

n l¹i hiÓu l thø nhÊt, nã cã gi¸ trÞ b»ng 3, do vËy gi¸ trÞ cña biÓu thøc trong (*) l

3.2.1=6. ChÝnh gi¸ trÞ ny ®−îc sö dông trong c©u lÖnh printf cña hm main() nªn kÕt

qu¶ in ra trªn mn h×nh l :

3!=6

Chó ý :Chó ý :Chó ý :Chó ý :Hm ®Ö qui so víi hm cã thÓ dïng vßng lÆp th× ®¬n gi¶n h¬n, tuy nhiªn víi m¸y

tÝnh khi dïng hm ®Ö qui sÏ dïng nhiÒu bé nhí trªn ng¨n xÕp v cã thÓ dÉn ®Õn trn

ng¨n xÕp. V× vËy khi gÆp mét bi to¸n m cã thÓ cã c¸ch gi¶i lÆp ( kh«ng dïng ®Ö qui )

th× ta nªn dïng c¸ch lÆp ny. Song vÉn tån t¹i nh÷ng bi to¸n chØ cã thÓ gi¶i b»ng ®Ö

qui.

1.2.10.31.2.10.31.2.10.31.2.10.3.2. C¸c bi to¸n cã thÓ dïng ®Ö qui :.2. C¸c bi to¸n cã thÓ dïng ®Ö qui :.2. C¸c bi to¸n cã thÓ dïng ®Ö qui :.2. C¸c bi to¸n cã thÓ dïng ®Ö qui :

Ph−¬ng ph¸p ®Ö qui th−êng ¸p dông cho c¸c bi to¸n phô thuéc tham sè cã hai

®Æc ®iÓm sau :

Bi to¸n dÔ dng gi¶i quyÕt trong mét sè tr−êng hîp riªng øng víi c¸c gi¸ trÞ ®Æc

biÖt cña tham sè. Ng−êi ta th−êng gäi l tr−êng hîp suy biÕn.

Trong tr−êng hîp tæng qu¸t, bi to¸n cã thÓ qui vÒ mét bi to¸n cïng d¹ng nh−ng

gi¸ trÞ tham sè th× bÞ thay ®æi. Sau mét sè h÷u h¹n b−íc biÕn ®æi dÖ qui nã sÏ dÉn tíi

tr−êng hîp suy biÕn.

Bi to¸n tÝnh n giai thõa nªu trªn thÓ hiÖn râ nÐt ®Æc ®iÓu ny.

1.2.10.31.2.10.31.2.10.31.2.10.3.3. C¸ch x©y dùng hm ®Ö qui :.3. C¸ch x©y dùng hm ®Ö qui :.3. C¸ch x©y dùng hm ®Ö qui :.3. C¸ch x©y dùng hm ®Ö qui :

Hm ®Ö qui th−êng ®−îc x©y dùng theo thuËt to¸n sau :

if ( tr−êng hîp suy biÕn)

{

Tr×nh by c¸ch gi¶i bi to¸n khi suy biÕn

}

else /* Tr−êng hîp tæng qu¸t */

{

Gäi ®Ö qui tíi hm ( ®ang viÕt ) víi c¸c gi¸

trÞ kh¸c cña tham sè 

}

Page 22: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 22/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 22 -

1.2.10.31.2.10.31.2.10.31.2.10.3.4. C¸c vÝ dô vÒ dïng hm ®Ö qui :.4. C¸c vÝ dô vÒ dïng hm ®Ö qui :.4. C¸c vÝ dô vÒ dïng hm ®Ö qui :.4. C¸c vÝ dô vÒ dïng hm ®Ö qui :

VÝ dô 1 :VÝ dô 1 :VÝ dô 1 :VÝ dô 1 :

Bi to¸n dïng ®Ö qui t×m USCLN cña hai sè nguyªn d−¬ng a v b.

Trong tr−êng hîp suy biÕn, khi a=b th× USCLN cña a v b chÝnh l gi¸ trÞ cña

chóng.Trong tr−êng hîp chung :

uscln(a,b)=uscln(a-b,b) nÕu a>b

uscln(a,b)=uscln(a,b-a) nÕu a<b

Ta cã thÓ viÕt ch−¬ng tr×nh nh− sau :

#include "stdio.h"

int uscln(int a,int b ); /* Nguyªn mÉu hm*/

main()

{ int m,n;

printf("\n Nhap cac gia tri cua a va b :");

scanf("%d%d",&m,&n);

printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n))

}

int uscln(int a,int b)

{

if (a==b)

return a;

else

if (a>b)

return uscln(a-b,b);

else

return uscln(a,b-a);

}

VÝ dô 2 :VÝ dô 2 :VÝ dô 2 :VÝ dô 2 :

Ch−¬ng tr×nh ®äc vo mét sè råi in nã ra d−íi d¹ng c¸c ký tù liªn tiÕp.

# include "stdio.h"

Page 23: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 23/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 23 -

# include "conio.h"

void prind(int n);

main()

{

int a;clrscr();

printf("n=");

scanf("%d",&a);

prind(a);

getch();

}

void prind(int n)

{

int i;

if (n<0)

{ putchar('-');

n=-n;

}

if ((i=n/10)!=0)

prind(i);

putchar(n%10+'0');

}

1.2.111.2.111.2.111.2.11 Bé tiÒn sö lý CBé tiÒn sö lý CBé tiÒn sö lý CBé tiÒn sö lý C ::::

C ®−a ra mét sè c¸ch më réng ng«n ng÷ b»ng c¸c bé tiÒn sö lý macro ®¬n gi¶n.

Cã hai c¸ch më réng chÝnh l #define m ta ®· häc v kh¶ n¨ng bao hm néi dung cña

c¸c file kh¸c vo file ®ang ®−îc dÞch.

Bao hm file :Bao hm file :Bao hm file :Bao hm file :

§Ó dÔ dng xö lý mét tËp c¸c #define v khai b¸o ( trong c¸c ®èi t−îng kh¸c ), C

®−a ra c¸ch bao hm c¸c file kh¸c vo file ®ang dÞch cã d¹ng :

#include "tªn file"

Page 24: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 24/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 24 -

Dßng khai b¸o trªn sÏ ®−îc thay thÕ bëi néi dung cña file cã tªn l tªn file. Th«ng th−êng

cã vi dßng nh− vËy xuÊt hiÖn t¹i ®Çu mçi file gèc ®Ó gäi vo c¸c c©u lÖnh #define chung

v c¸c khai b¸o cho c¸c biÕn ngoi. C¸c #include ®−îc phÐp lång nhau. Th−êng th× c¸c

#include ®−îc dïng nhiÒu trong c¸c ch−¬ng tr×nh lín, nã ®¶m b¶o r»ng mäi file gèc ®Òu

®−îc cung cÊp cïng c¸c ®Þnh nghÜa v khai b¸o biÕn, do vËy tr¸nh ®−îc c¸c lçi khã chÞudo viÖc thiÕu c¸c khai b¸o ®Þnh nghÜa. TÊt nhiªn khi thay ®æi file ®−îc bao hm vo th×

mäi file phô thuéc vo nã ®Òu ph¶i dÞch l¹i.

PhÐp thÕ MACRO :PhÐp thÕ MACRO :PhÐp thÕ MACRO :PhÐp thÕ MACRO :

§Þnh nghÜa cã d¹ng :

#define biÓu thøc 1 [ biÓu thøc 2 ]

sÏ gäi tíi mét macro ®Ó thay thÕ biÓu thøc 2 (nÕu cã) cho biÓu thøc 1.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

#define YES 1

Macro thay biÕn YES bëi gi¸ trÞ 1 cã nghÜa l hÔ cã chç no trong ch−¬ng tr×nh cã

xuÊt hiÖn biÕn YES th× nã sÏ ®−îc thay bëi gi¸ trÞ 1.

Ph¹m vi cho tªn ®−îc ®Þnh nghÜa bëi #define l tõ ®iÓm ®Þnh nghÜa ®Õn cuèi file

gèc. Cã thÓ ®Þnh nghÜa l¹i tªn v mét ®Þnh nghÜa cã thÓ sö dông c¸c ®Þnh nghÜa kh¸c

tr−íc ®ã. PhÐp thÕ kh«ng thùc hiÖn cho c¸c x©u dÊu nh¸y, vÝ dô nh− YES l tªn ®−îc

®Þnh nghÜa th× kh«ng cã viÖc thay thÕ no ®−îc thùc hiÖn trong ®o¹n lÖnh cã "YES".

V× viÖc thiÕt lËp #define l mét b−íc chuÈn bÞ chø kh«ng ph¶i l mét phÇn cña

ch−¬ng tr×nh biªn dÞch nªn cã rÊt Ýt h¹n chÕ vÒ v¨n ph¹m vÒ viÖc ph¶i ®Þnh nghÜa c¸i g×.

Ch¼ng h¹n nh− nh÷ng ng−êi lËp tr×nh −a thÝch PASCAL cã thÓ ®Þnh nghÜa :

#define then

#define begin {

#define end; }

sau ®ã viÕt ®o¹n ch−¬ng tr×nh :

if (i>0) then

begin

a=i;

......

end;

Page 25: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 25/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 25 -

Ta còng cã thÓ ®Þnh nghÜa c¸c macro cã ®èi, do vËy v¨n b¶n thay thÕ sÏ phô thuéc vo

c¸ch gäi tíi macro.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

§Þnh nghÜa macro gäi max nh− sau :#define max(a,b) ((a)>(b) ?(a):(b))

ViÖc sö dông :

x=max(p+q,r+s);

t−¬ng ®−¬ng víi :

x=((p+q)>(r+s) ? (p+q):(r+s));

Nh− vËy ta cã thÓ cã hm tÝnh cùc ®¹i viÕt trªn mét dßng. Chõng no c¸c ®èi cßn

gi÷ ®−îc tÝnh nhÊt qu¸n th× macro ny vÉn cã gi¸ trÞ víi mäi kiÓu d÷ liÖu, kh«ng cÇn ph¶i

cã c¸c lo¹i hm max kh¸c cho c¸c kiÓu d÷ liÖu kh¸c nh−ng vÉn ph¶i cã ®èi cho c¸c hm.

TÊt nhiªn nÕu ta kiÓm tra l¹i viÖc më réng cña hm max trªn, ta sÏ thÊy r»ng nã cã thÓ

g©y ra sè bÉy. BiÓu thøc ®· ®−îc tÝnh l¹i hai lÇn v ®iÒu ny l kh«ng tèt nÕu nã g©y ra

hiÖu qu¶ phô kiÓu nh− c¸c lêi gäi hm v to¸n tö t¨ng. CÇn ph¶i thËn träng dïng thªm

dÊu ngoÆc ®Ó ®¶m b¶o trËt tù tÝnh to¸n. Tuy vËy, macro vÉn rÊt cã gi¸ trÞ.

Chó ý :Chó ý :Chó ý :Chó ý :

Kh«ng ®−îc viÕt dÊu c¸ch gi÷a tªn macro víi dÊu më ngoÆc bao quanh danh

s¸ch ®èi.

VÝ dô :VÝ dô :VÝ dô :VÝ dô :

XÐt ch−¬ng tr×nh sau :

main()

{

int x,y,z;

x=5;

y=10*5;

z=x+y;

z=x+y+6;

z=5*x+y;

Page 26: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 26/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 26 -

z=5*(x+y);

z=5*((x)+(y));

printf("Z=%d",z);

getch();

return;}

Ch−¬ng tr×nh sö dông MACRO sÏ nh− sau :

#define BEGIN {

#define END }

#define INTEGER int

#define NB 10

#define LIMIT NB*5

#define SUMXY x+y

#define SUM1 (x+y)

#define SUM2 ((x)+(y))

main()

BEGIN

INTEGER x,y,z;

x=5;

y=LIMIT;

z=SUMXY;

z=5*SUMXY;

z=5*SUM1;

z=5*SUM2;

printf("\n Z=%d",z);

getch();

return;

END

Câu hi hiu bài phn cu trúc C:

Câu1: bn hãy nêu các tp lnh ca C.

Câu 2: có bao nhiêu loi bin trong C , hãy lit kê và cho ng dng.

Câu 3: bn cho bit th nào là s có du và không du.

Câu 4: ñơn v nh nht trong C là gì.

Page 27: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 27/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

Biên son : Ks.Cao Bá Vinh - 27 -

Câu 5: cu trúc thay th kiu là gì.

Câu 6: lnh if và elseif khác nhau ch nào.

Câu 7: lnh if và switch case bn hãy so sánh chúng.

Câu 8: lnh while {} , và do{}while bn hãy so sánh chúng.

Câu 9: khi nào dùng lnh while.Câu 10 : khi nào dùng lnh do{}while.

Câu 11: bn hãy cho bit 3 kiu vit này khác nhau gì không:

a. while(++i<100); b.while(i++<100); c.while(i<100) i++;

câu 12 : bn hãy cho cách lp trình tương ñương ca nhóm lnh sau và gii thích .

Do{ i=i+1;j=j+1}while(i<1000&&j<300);

Câu 13 : bn hãy vit lnh qua câu gi ý sau:

ði cho ñn khi nào bin I ln hơn 700 và bin j ln hơn 1000 hoc bin k nh hơn 500

thì mi thoát khi vòng lp.Câu 14 : bn hãy nêu quy trình làm vic ca vòng lp for.

Câu 15: bn hãy nhn xét ñúng hay sai ch nào, ti sao?

For(i=10;i<100;i=i+8) i=i-8;

Câu 16: bn hãy nhn xét ñúng hay sai ch nào, ti sao?

For(i=0;i>100;i=i+8) ;

Câu 17: bn hãy nhn xét ñúng hay sai ch nào, ti sao?

For(i=0,j=10,k=3;k<666;j++,k+=j+i,i=i+8) ;Câu 18: câu lnh break và continue ng dng làm gì ,cho ví d.

Câu 19: bn cho bit th nào là bin cc b và bin toàn cc , trong C có bao nhiêu loi bin?

Câu 20: hàm và macro ging và khác nhau ch nào?.

Câu 21: bn hãy cho ví d hàm có ñi s và không ñi s.

Câu 22: bn hãy cho ví d hàm có giá tr tr v và không giá tr tr v.

Page 28: chuong1_lhu

7/31/2019 chuong1_lhu

http://slidepdf.com/reader/full/chuong1lhu 28/28

Giáo trình AVR Khoa ðin-ðin T-Trưng ðH Lc Hng

4. trình son tho và biên dch chương trình Codvision (CV).

4.1 gii thiu:Cv là chương trình son tho bng ngôn ng C do công ty “HP INFO

TECH” sn xut . và CV rt ñưc nhiu ngưi s dng vit nam vì nó rt linh

hot nhiu thư vin ,có phn to code sn cho ngư dùng và phn cnh báo li rt

chính xác, ñc bit là có phn ti ưu mã code hoc ti ưu tc ñ chy.

4.2 Giao din CV:

4.3 Hưng dn s dng CV.

4.3.1 to project mi.

4.3.2 to các thư vin .

4.3.3 chnh cu hình thay ñi(thay tên ic , tn s)

4.3.4 biên dch và giao din np chương trình.