Chào các bạn.
Như các bạn đã biết trong các lệnh ASM của vi xử lý thì thao tác với các toán tử là các thanh ghi sẽ tốn ít thời gian nhất và do đó tối ưu được chương trình chạy rất nhanh, thời gian thực hiện từng thuật toán sẽ giảm đi nhiều.
Do đó, các biến trong chương trình C chúng ta không nên khai báo các biến kiểu như:
1 2 | unsigned char i; unsigned int temp; |
Mà chúng ta sẽ thay bằng dùng #define để định nghĩa các thanh ghi không sử dụng trong chương trình để làm biến các biến.
Vấn đề phát sinh: các biến có độ dài 1 byte thì gán bằng các thanh ghi 1 byte, còn các biến có độ dài hơn 1 byte thì gán bằng thanh ghi dài hơn đó, hoặc nếu không thì cho nó thành nhiều biến hơn. Như temp (16 bit) thành temp_L và temp_H, mỗi biến là 8 bit.
Sau đây mình sẽ minh họa một đoạn chương trình khi thao tác với một biến 16 bit khai báo kiểu unsigned int và khi thao tác với 2 thanh ghi.
Chương trình này chính là chương trình điều khiển LED1 được gọi trong hàm ngắt của Timer0, Led1 sẽ sáng khi led1_cnt khác 0 và giảm giá trị này đi 1, và tắt khi led1_cnt = 0. Như vây chỉ cần cho led1_cnt các giá trị khác nhau thì các khoảng thời gian led sáng sẽ khác nhau.
1. Thực hiện với biến unsigned int
1 2 3 | led1 = 1; if(led1_cnt == 0) led1 = 0; else led1_cnt --; |
2. Thực hiện với 2 byte là 2 thanh ghi: led1_cntH và led1_cntL
1 2 3 4 5 6 7 8 9 10 11 | // Control led1 led1 = 1; if (led1_cntL == 0){ if (led1_cntH == 0) led1 = 0; else { led1_cntH --; led1_cntL --; }; } else led1_cntL--; |
Chúc các bạn thành công.
Các bài viết liên quan:
- PIC16F887 Điều khiển thời gian đóng cắt một led từ PC qua UART Chào các bạn. Nay ngồi code cho con PIC16F887 để điều khiển đèn halogen, thực ra chính là điều khiển một chân rồi qua TIP122 và relay để điều khiển đèn thôi (vì dòng tải lên tới 10A). Mình thấy cách viết hay nên chia sẻ với các bạn. Dùng để lưu trữ luôn. Để [...]...
- Phan tich thuat toan: thuc hien lenh dieu khien tu PC qua RS232 Chào các bạn. Không biết ai đã đọc bài viết của mình PIC16F887 – Điều khiển thời gian đóng cắt một led từ PC qua UART chưa. Trong này, mình có thực hiện đặt thời gian đóng cắt từ PC bằng lệnh với cú pháp. Txyzt#: trong đó xyzt là thời gian tính theo hệ [...]...
- Lập trình C cho vi điều khiển Mình tham gia các diễn đàn từ lâu lắm rồi và cũng giải đáp nhiều thắc mắc về lập trình C cho các vi điều khiển thông dụng như 8051, PIC. Mình viết bài này để giải đáp thắc mắc cho các bạn mới bước vào học lập trình cho vi điều khiển dùng ngôn [...]...
- Viết LaTeX - chuẩn bị trình biên soạn và trình dịch Tối thiểu, cần có các chương trình để sửa đổi LaTeX là trình biên soạn, trình dịch và trình xem DVI. Trình biên soạn Thực tế thì có thể dùng trình biên soạn đơn giản tương tự như notepad để sửa đổi các file LaTeX nhưng nên dùng các trình LaTeX editor thì sẽ có [...]...
- So sánh các bộ điều khiển tốc độ động cơ DC Trong bài này, tác giả muốn so sánh bộ điều khiển PID truyền thống và bộ điều khiển Robust Feedforward (thực tế không phải là Feedforward, mà là cải tiến của tác giả) trong quá trình tác giả và bạn của tác giả (Bá Hải) cùng nghiên cứu tại BioRobotics Lab Các bộ điều khiển [...]...
- Viết LaTeX - Sơ lược về quá trình biên dịch Hình trên miêu tả mối quan hệ giữa mã nguồn LaTeX (TeX) và các định dạng mà ta có thể có từ các mã nguồn này. Màu xanh trên các mũi tên là các câu lệnh bạn phải dùng để có được các định dạng file tương ứng. Như pdftex để dịch từ mã nguồn [...]...



{ 5 comments… read them below or add one }
anh bac co the goi cho em tai lieu ve keil c nha! em can tai lieu de hoc! cam on anh truoc nha
ДА! Я у вас тут пиарюсь
Anh ơi, cho em hỏi, có một số thanh ghi trong Vi sual C++ phải thêm đầu e (như ecx) vậy những thanh ghi nào phải chuyển như vậy ạ?
“Mà chúng ta sẽ thay bằng dùng #define để định nghĩa các thanh ghi không sử dụng trong chương trình để làm biến các biến.”
anh có thể giải thích chỗ này rõ hơn một tí được không em không hiểu lắm !
Đoạn chương trình mẫu của anh em có thấy anh dùng # define đâu ???
Em mới vào học C nên chậm hiểu mong anh giải thích rõ hơn ,cảm ơn anh
Chúc Anh sức khỏe
Chào em.
Em đọc bài viết này nhé
Chúc em thành công.