Bài giảng "Lập trình hệ thống nhúng: chương 4 - Bùi Quốc Bảo" gồm các nội dung sau: chậm trễ sử dụng vòng lặp lệnh, cấu trúc Timeout, chậm trễ trong sử dụng bộ đếm thời gian, Cấu trúc superloop với delay. Và một số nội dung khác | 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. BM K Thu t ði n T - ðH Bách Khoa 2 1 C u trúc Timeout N Key pressed? 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á trình ch y (run-time) Y Process 3 BM K Thu t ði n T - ðH Bách Khoa 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); BM K Thu t ði n T - ðH Bách Khoa 4 2 8051 Timer BM K Thu t ði n T - ðH Bách Khoa 5 8051 Timer BM K Thu t ði n T - ðH Bách Khoa 6 3 Delay using timer void delay50ms(void) { TMOD &= 0xF0; TMOD |= 0x01; ET = 0; TH0 = 0x3C; TL0 = 0xB0; TR0 = 1; While (!TF0); TR0 = 0; TF0 = 0; } BM K Thu t ði n T - ðH Bách Khoa 7 #ifndef _DELAY_H #define . #define #define #define #define OSC_FREQ OSC_PER_INST TIME_1ms PRELOAD_1ms 12 12 1000 65536 – (TIME_1ms)/(OSC_FREQ/OSC_PER_INST) #define PRELOAD_1ms_H #define PRELOAD_1ms_L (PRELOAD_1ms / 256) (PRELOAD_1ms % 256) #define TIME_50ms #define PRELOAD_50ms . void delay1ms(void); void delay50ms(void); void delayMs(unsigned int n); #endif BM K Thu t ði n T - ðH Bách Khoa 8 4 #include #include “” void { } void { } void { } delay1ms(void) delay50ms(void) delayMs(unsigned int n) BM K Thu t ði n T - ðH Bách Khoa 9 Access lowbyte and highbyte #define LOWBYTE(v) #define HIGHBYTE(v) ((unsigned char) (v)) ((unsigned char) (((unsigned int) (v)) >> 8)) #define BYTELOW(v) #define BYTEHIGH(v) (*(((unsigned char *) (&v) + 1))) (*((unsigned char *) (&v))) Void main(void) { volatile unsigned char i; i = LOWBYTE(0x1234); i = BYTEHIGH(0x1234); Sai ch nào } BM K