[ บทความ : DnRx051 - Lab01 ควบคุม LED ด้วย Switch] |
ห่างหายกันไปนานเลยครับ กับบทความ พอดีภาคเรียนนี้ผมสอนวิชาไมโครโปรเซสเซอร์ โดยเน้นที่เรื่องการประยุกต์ใช้ MCS-51 เลยนำเอกสารประกอบการทดลอง มาให้ศึกษากัน คิดว่าพอเป็นประโยชน์ แก่ผู้ที่สนใจนะครับ ส่วนหนังสือประกอบการเรียนนั้น ก็คือ หนังสือ Micro-C/51
ตัวอย่างการรับข้อมูลจาก
P3.0/P3.1 เพื่อกำหนดความเร็วของ
LED
อุปกรณ์
บอร์ด DnRx051
(AT89C2051/AT89C4051) หรือวงจรจากหน้า 54
บอร์ด
LED x8
บอร์ด
SW x4 (P3.0-P3.3)
Micro-C/51 Version
2.4 หรือใหม่กว่า
คู่มือภาษาซีสำหรับไมโครคอนโทรลเลอร์
MCS-51 (หนังสือ
Micro-C51)
www.dunfield.com (ผู้สร้าง Micro-C)
พอร์ต
P1.0-P1.7 ต่อกับ LED ที่ทำงานแบบ
Sink (จากหนังสือหน้า 270)
P3.0 และ P3.1 ต่อเข้ากับวงจร
Switch (จากหนังสือหน้า 278)
#include <8051reg.h>
char patt[] = {0x00, 0x01,
0x02, 0x04, 0x08, 0x10, 0x20,
0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
delay(speed)
int speed;
{
int i;
for (i=0; i<speed; i++);
}
main()
{
char cnt;
char tmp;
int
speed;
cnt = 0;
speed = 10000;
while(1) {
tmp = P3&0x03;
if (tmp == 2) {
if (speed < 20000) speed += 1000;
else speed = 20000;
P1 = ~(patt[cnt]|0x80);
} else if (tmp == 1) {
if (speed > 1000) speed -= 1000;
else speed = 1000;
P1 = ~(patt[cnt]|0x40);
} else {
P1 = ~patt[cnt];
}
cnt++;
if (cnt == 13) cnt = 0;
delay(speed);
}
}
ปุ่มจากพอร์ตใดทำให้ค่าลดลง
..
ปุ่มจากพอร์ตใดทำให้ค่าเพิ่มขึ้น
..
ปัญหาจากโปรแกรมนี้คือ
1
..
2
..
เหตุใดต้อง
AND ค่าของ P3 ด้วย 0x03
..
..
เขียนโดย : ศุภชัย
บุศราทิจ
Author : Supachai Budsaratij
e-mail : raek@se-ed.net
วันที่ทำการปรับปรุง : วันอังคารที่ ๑ มกราคม
พ.ศ. ๒๕๔๕