intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình hệ thống nhúng: delay sử dụng vòng lặp lệnh

Chia sẻ: Nguyen Lan | Ngày: | Loại File: PDF | Số trang:11

134
lượt xem
19
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao....

Chủ đề:
Lưu

Nội dung Text: Lập trình hệ thống nhúng: delay sử dụng vòng lặp lệnh

  1. L P TRÌNH H TH NG NHÚNG BÙI QU C B O Delay s d ng vòng l p l nh For(i=1000;i>0;i--); ðơn gi n Không ñòi h i timer Không bi t chính xác ñư c kho ng delay là bao nhiêu ðư c s d ng khi c n t o ra các th i gian delay không ñòi h i s chính xác l n. 2 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 1
  2. C u trúc Timeout N u phím b h ng hay ti p xúc không t t, chương trình s b treo trong quá N trình ch y (run-time) Key pressed? Y Process 3 BM K Thu t ði n T - ðH Bách Khoa TP.HCM C u trúc Timeout ellapseTime = initValue N N Key pressed? ellapseTime-- ellapseTime=0? Y Process sbit Key = P1^0; ellapseTime = 1000; While (Key != 0) && (--ellapseTime != 0); 4 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 2
  3. 8051 Timer 5 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 8051 Timer 6 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 3
  4. Delay using timer void delay50ms(void) { TMOD &= 0xF0; TMOD |= 0x01; ET = 0; TH0 = 0x3C; TL0 = 0xB0; TR0 = 1; While (!TF0); TR0 = 0; TF0 = 0; } 7 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Delay.h #ifndef _DELAY_H #define ……………. #define OSC_FREQ 12 #define OSC_PER_INST 12 #define TIME_1ms 1000 #define PRELOAD_1ms 65536 – (TIME_1ms)/(OSC_FREQ/OSC_PER_INST) #define PRELOAD_1ms_H (PRELOAD_1ms / 256) #define PRELOAD_1ms_L (PRELOAD_1ms % 256) #define TIME_50ms ………………………………………………………… #define PRELOAD_50ms ……………………………………………………. void delay1ms(void); void delay50ms(void); void delayMs(unsigned int n); #endif 8 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 4
  5. delay.c #include #include “delay.h” void delay1ms(void) { } void delay50ms(void) { } void delayMs(unsigned int n) { } 9 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Access lowbyte and highbyte #define LOWBYTE(v) ((unsigned char) (v)) #define HIGHBYTE(v) ((unsigned char) (((unsigned int) (v)) >> 8)) #define BYTELOW(v) (*(((unsigned char *) (&v) + 1))) #define BYTEHIGH(v) (*((unsigned char *) (&v))) Void main(void) { Sai ch nào volatile unsigned char i; i = LOWBYTE(0x1234); i = BYTEHIGH(0x1234); } 10 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 5
  6. Multi tasking C u trúc superloop: Như c ñi m: int main(void) Không dùng cho nh ng ng { d ng ñòi h i chính xác v m t while (1) { timing. Task_1(); Không có kh năng d ng 1 task Task_2(); ñang th c thi ñ th c hi n task } còn l i } (pre-emption) 11 BM K Thu t ði n T - ðH Bách Khoa TP.HCM C u trúc superloop v i delay 30s 5s void Delay(uint32_t seconds) 35s { // Setup a hardware timer for the given time // Loop until the delay has been reached. } int main(void) { while (1) { Set_Green(); Delay(30); Set_Yellow(); Delay(5); Set_Red(); Delay(35); } } 12 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 6
  7. C u trúc superloop v i delay void Delay(uint32_t milliseconds) { // Setup a hardware timer for // the given time // Loop until the delay has //been reached. Expected timing } int main(void) { while (1) { Task_1(); Delay(5); Task_2(); Real timing Delay(5); } } Như c ñi m: C u trúc này ch ch y ñúng trong trư ng h p các task r t ng n 13 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Sandwich delay int main(void) { Như c ñi m: while (1) { Start_Timer(5); Không cung c p ñư c m c ñ ưu Task_1(); tiên cho các tác v Wait_For_Timer(); Start_Timer(5); Task_2(); Wait_For_Timer(); } } 14 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 7
  8. Foreground/Background scheduling // Run by hardware ForeGround Level BackGround Level //every millisecond void Timer_ISR(void) { updateDisplay(); updateData(); } updateData(); void main(void) { updateDisplay(); Init_ISR(); processInput(); while (1) { updateDisplay(); processInput(); } } 15 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Round-Robin scheduler: Poll and serve Như c ñi m: N u 1 thi t b c n th i gian ñáp ng nhanh hơn Y I/O 1 need service I/O service #1 1 “cycle time”, h th ng có th ch y sai. cycle time N N u có 1 trình ph c v I/O ch y trong th i gian Y dài, ñáp ng c a h I/O 2 need service I/O service #2 th ng s b ch m. N ð n ñ nh c a h th ng ph thu c nhi u y u t . Khó s a ñ i chương trình 16 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 8
  9. Round-Robin scheduler with interrupt Interrupt Level Task level Y Clear Flag 1 I/O 1 Flag? ISR1 Set Flag 1 I/O service #1 N Y ISR2 Set Flag 2 Clear Flag 2 I/O 2 Flag? I/O service #2 N 17 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Như c ñi m: T t c các tác v có cùng m c ưu tiên Solution: ðưa các code có ñ ưu tiên cao vào ISR 18 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 9
  10. 8051 interrupt vector table Ban ñ u, h 8051 ch có 5 ngu n ng t 19 BM K Thu t ði n T - ðH Bách Khoa TP.HCM Interrupt function Các nhà s n xu t sau này thêm vào nhi u ng t cho 8051. Keil C h tr 32 vector ng t. ð nh nghĩa ng t: void ISR_name(void) interrupt interrupt_number using bank_number 20 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 10
  11. Case study 30s 5s 35s Vi t chương trình ñi u khi n ñèn giao thông: a) Dùng phương pháp sandwich delay b) Dùng ng t Các ñèn xanh-vàng-ñ ñư c ñi u khi n b i P1.0, P1.1, P1.2. ðưa chân port lên 1 làm ñèn sáng. 21 BM K Thu t ði n T - ðH Bách Khoa TP.HCM 11
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
11=>2