Mô phỏng trênproteus và kiểm tra trên mạch phần cứng.1.5.. - CờbáobậnBF:BusyFlagKhi đang thực thi các hoạt động bên trong, LCD bỏ qua mọi giao tiếp với bênngoài và bật cờ BF thông qua ch
Trang 2MỤCLỤC
Trang
Bài1.LậptrìnhCvớiviđiềukhiển8051 03
Bài2:GiaotiếpvớimatrậnphímvàmànhìnhLCD16x2 11
Bài3:GiaotiếpvớicácđènLED7thanh 18
Bài4:Giaotiếpvớicảmbiếnnhiệtđộ 23
Bài5:Lậptrìnhsửdụngngắtngoài 27
Bài6:Hệđiềuhànhthờigianthực 33
Trang 3LẬPTRÌNHCVỚIVIĐIỀUKHIỂN8051 1.1 MỤCĐÍCH
D1 LED
Trang 6//design by : Template code
// version: 1.0
//date: 01/03/2023
//description: ON/OFF led void main() {
do {
P0 = 0x00; // Turn ON diodes on PORT0 P1 =
0x00; // Turn ON diodes on PORT1 P2 =
0x00; // Turn ON diodes on PORT2 P3 =
0x00; // Turn ON diodes on PORT3
Delay_ms(100); // 1 second delay
} while(1);// Endless loop
Trang 71.4.2 Bàitậpthựchành
1 ViếtlạichươngtrìnhđiềukhiểnLedđơnnóitrênvớicáchiệuứngledđuổinhau từ P0.0🠒P0.7🠒P1.0🠒P1.7🠒P2.0🠒P2.7🠒P3.0🠒P3.7 sử dụng các lệnh
Trang 8- Lưuđồthuậttoán?
Trang 10char keypadPort at P0 ;
Keypad_Init();
// khai báo ma trận phím ở port0// khởi tạo ma trận bàn phímchar Keypad_Key_Click(void);// trả về trạng thái của phím bấm từ (116))
Trang 11Hình2.2.MànhìnhLCD16x2.
Trang 15_LCD_SHIFT_RIGHT Shiftdisplayrightwithoutchanging
displaydataRAM
2.3 THIẾTBỊTHỰCHÀNHTHÍNGHIỆMVÀVẬTTƢTIÊUHAO: 2.3.1 Thiếtbịthựchànhthínghiệm
Lcd_Init();// Initialize LCD
Lcd_Cmd(_LCD_CLEAR);// Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);// Cursor off
Trang 16Lcd_Out(1, 1, "Key: " ) ; //WritemessagetextonLCD
Trang 17- Viết chương trình trên, vẽ sơ đồ trên proteus và kiểm tra hoạt động của hệthống quan sát kết quả.
- Vẽlưuđồthuậttoánchochươngtrìnhtrên
2.4.2 Bàitậpthựchành
1 Viết chương trình nhập vào một số nhị phân 4 bit và chuyển đổi số nhị phân
đó sang số hexa hiển thị lên màn hình LCD Mô phỏng trên proteus và kiểm tratrênmạch phần cứng
2 Viết chương trình nhập vào hai số hexa và tính tổng, tích của hai số hiểnthịhai số đó lên màn hình LCD Mô phỏng trên proteus và kiểmtra trên mạch phần cứng
// Pressed key is the same as previous
// Print key ASCII value on LCD
Trang 18GIAOTIẾPVỚICÁCĐÈNLED7THANH 3.1 MỤCĐÍCH
D12A Catotchung
Hình3.2.CấutạođènLED7thanh.
764211095
8 3
A B 76
Trang 20P0.6 G
P0.5 F
P0.4 E
P0.3 D
P0.2 C
P0.1 B
P0.0 A
SỐ HEX
Trang 21digit = number / 1000u ; // extract thousands digit
digits_array[3]=mask(digit);/ / andstoreittodigitsarray digit
= (number / 100u) % 10u;/ / e x t r a c t h u n d r e d s
Trang 23sbit OW_Bit at P1_2_bit;
unsigned short Ow_Reset();
//Khởi tạo chân data// Phát ra lệnh reset cảm biến DS1820unsigned short Ow_Read();// Đọc dữ liệu từ cảm biến ds1820, dữ liệu trả vềdưới dạng unsigned short
Void Ow_Write( char par)// Gửi lệnh xuống ds1820
4.2 CƠSỞLÝTHUYẾT
4.2.1 CảmbiếnnhiệtđộDS1820
Cảm biến nhiệt độ DS18B20 là cảm biến nhiệt độ chuyên dùng để đo nhiệt độmôi trường với đầu ra dạng số khác với một số loại cảm biến analog như:LM35,LM335,
Nộidungcáchàmnhưsau:
4.3 THIẾTBỊTHỰCHÀNHTHÍNGHIỆMVÀVẬTTƢTIÊUHAO:
4.3.1 Thiếtbịthựchànhthínghiệm
-MáytínhcàiđặtphầnmềmMikroCfor8051
Trang 25//Extracthundredsdigit text[6)] = (temp_fraction/10)%10+ 4 8 ; // Extract tens digit text[7]
=t e m p _ f r a c ti o n % 1 0 + 48; // Extract ones digit
ifyouseegreekalphalettertrytyping178insteadof223Lcd_Chr(2,1
4,'C');
// -mainloop
Trang 264.4.2 Bàitậpthựchành
1 ViếtlạichươngtrìnhtrênđổinhiệtđộC🠒 Fvàngượclại.Môphỏngtrên proteus và kiểm tra trên mạch phần cứng
2 Hiển thị nhiệt độ đo được từ cảm biến DS1820 lên các đèn LED 7 thanh Mô phỏng trên proteus và kiểm tra trên mạch phần cứng
// Issue command SKIP_ROM// Issue command READ_SCRATCHPAD
temp = (Ow_Read() << 8) + temp;
// - Format and display result on Lcd
Trang 27LẬPTRÌNHSỬDỤNGNGẮTNGOÀI 5.1 MỤCĐÍCH
Trang 28EA:( I E 7 bit)là bitchophép ngắt toàn bộ.Tức lànếu bạn sử dụng mộttrong5 ngắt
kể trên của vđk thì bạn phải setb i t n à y l ê n v ớ i g i á t r ị 1 N g ư ợ c
Trang 29Sơ đồ nguyên lý ghép nối vi điều khiển với phím bấm và màn hình LCD 16x2 được trình bày trên hình 5.1 và 5.2.
Trang 30Hình5.2.SơđồnguyênlýghépnốiviđiềukhiểnvớimànhìnhLCD16x2
Trang 31//Design by : Template code
// version: 1.0
//date: 1/3/2023
//description: counter on lcd NOTES:
Make sure you turn ON the PORT0 LEDs (SW7.1), set Pull up PORT3.2 (SW4.3) and set jumper J4 in GND position
// Global variable cnt and tmp with starting
void External_ISR()org 0x0003 ilevel 0 {// Interrupt rutine
EA_bit = 0;// Disable Interrupts
Trang 32Lcd_Out(1, 1, " counter exemple : "); Lcd_Out(2, 1, " design
Template codebkhn"); delay_ms(2000);
// Moving text Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1, 1,
//sprintf(buffer, "%10d", cnt);// Format ww and store it to buffer text[0]
= cnt/1000+ 48;// Extract thousands digit
text[1] = (cnt/100)%10 + 48;// Extract hundreds digit text[2] =
(cnt/10)%10 + 48;// Extract tens digit text[3] = cnt%10+ 48;// Extract
Trang 33- Ngắtlàgì?Ngắtngoàilàgì?
Trang 35HỆĐIỀUHÀNHTHỜIGIANTHỰC 6.1 MỤCĐÍCH
t h ự c C á c đ ặ c đ i ể m k h á c c ó t h ể đ ư ợ c t h ê m v à o n h ư m ộ t
v ò n g n g o à i k h i c ầ n t h i ế t N h â n n h ỏ c ủ a m ộ t R T O S
t h í c h h ợ p c h o m ộ t ứ n g d ụ n g b ộ x ử l ý n h ỏ , t r o n g
k h i n h ữ n g v ò n g n g o à i c ó t h ể g i ú p đỡxâydựnghệthốngthờigianthực lớn.Các RTOSthườngcungcấp các mức xử lý ưu tiên Các công việc
ưu tiên cao hơn sẽ được thực hiện trước Ngoài các chứcn ă n g c ủ a h ệ đ i ề u h à n h
Trang 36Hình7.1:SơđồchứcnăngcủamộthệRTOS
Trang 37Nhiều hệ điều hành không thời gian thực cũng cung cấp nhân của tương tựnhưng điểm khác biệt lớn nhất của hệ điều hành thời gian thực và hệ điều hành khôngthờigian thựcnóichunglàtính tiền định(deterministic) Thời gian tiềnđịnh tức làcác dịch
vụ của hệ điều hành thực hiện chỉ được yêu cầu một khoảng thời gian nhất định, muốntiền định tức là phải tính toán chính xác theo toán học Các đáp ứng về thời gian lànghiêm ngặt trong hệ điều hành thời gian thực, không thể có thành phần thờigian ngẫunhiên Với một phần thời gian ngẫu nhiên có thể tạo ra trễ ngẫu nhiên, từ đó gây ra cácđáp ứng deadline không thoả mãn
Trang 386.3 THIẾTBỊTHỰCHÀNHTHÍNGHIỆMVÀVẬTTƢTIÊUHAO: 6.3.1 Thiếtbịthựchànhthínghiệm
Trang 40ChọnYes
Trang 41Tạofilemain.c
Trang 42Viếtcode:
Trang 43/**************************************************************/job0 () _task_ 0{
Trang 45Viết chương trình đèn giao thông Mô phỏng trên proteus và kiểmtra trên mạch phần cứng.
/* wait for timeout: 150 ticks */
/* wait for timeout: 150 ticks */}
}