ช่วยหน่อย timer0 ของ 16f877
LSVคลังสมองออนไลน์ "ปีที่21"
มีนาคม 29, 2024, 09:25:40 PM *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
 
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: ช่วยหน่อย timer0 ของ 16f877  (อ่าน 11774 ครั้ง)
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« เมื่อ: กันยายน 25, 2011, 01:04:45 AM »

 คือว่าผมอยากเขียนโปรแกรม CountDown Timer แสดงผล 7segment 4 หลัก
ผมไม่รู้ว่าจะกำหนดค่าเริ่มต้นการนับ ของ timer0 ยังไง มันต้องดูตรงไหน ในdata sheet ก็ดูไม่เป็น

ขอตัวอย่างโปรแกรมพร้อมคำอธิบายหน่อยครับ ของ 16f877 นะครับ พอดีแถวบ้านมีขายแต่เบอร์นี้ อีกอย่าง ขอที่กำหนดเวลาการนับได้ด้วยนะครับ 

ขอบพระคุณล่วงหน้าครับ ขอบคุณ


บันทึกการเข้า

Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #1 เมื่อ: กันยายน 25, 2011, 01:08:38 AM »

อีกอย่าง ขอเป็นภาษาซี นะครับ
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #2 เมื่อ: กันยายน 25, 2011, 06:27:20 AM »

ดาต้าชีท http://www.es.co.th/Schemetic/PDF/PIC16F87X.PDF
อ่านหน้า 49 หมวดหัวข้อ TIMER0 MODULE

การใช้งาน TMR0 ต้องกำหนด register ดังนี้

- OPTION_REG REGISTER เพื่อกำหนดคุณสมบัติของ TMR0
- INTCON เพื่อกำหนด Interrupt จาก TMR0

แค่นี้มันก็จะทำงานนับเวลาแล้ว พอมันเกิดการ Overflow ก็จะมีการสั่งงานไปที่ Fanction Interrupt จากนั้นท่านต้องการให้มันทำอะไรก็กำหนดในฟังก์ชั่นนี้ เช่น เพิ่มค่าวินาทีขึ้น 1 ค่าเมื่อเกิดการ Interrupt

การศึกษาโปรแกรม Count Down ต้องเริ่มจากต่อไปนี้
- ตัวแปรแบบ Aray เพื่อเก็บข้อมูลการแสดงผลของจอ 7-Segment
- การต่อและการเขียนโปรแกรมควบคุม 7-segment แบบมัลติเพล็กซ์
- การใช้งาน Timer0 Module
- การเขียนโปรแกรมแบบ Interrupt Fanction

ถ้ายังเริ่มต้นไม่ถูกจริงๆ ขอแนะนำหนังสือ PIC Works Example and C Source Code
http://www.thaieasyelec.com/Education/Books/PIC-Works-Examples-and-C-Source-Code-Book.html
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #3 เมื่อ: กันยายน 25, 2011, 12:01:26 PM »

ขอบคุณครับ พี่
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #4 เมื่อ: กันยายน 25, 2011, 03:09:05 PM »

ไปไม่ถูกจริงๆ รบกวนพี่ช่วยเขียนโปรแกรมให้หน่อยครับ

ตามวงจรเลยครับ ใช้ 16f877 Crystal 10MHz
ใช้ Switch 3 ตัว
s1_start ต่อกับ portRD5
s2_+1 ต่อกับ portRD6
s3_-1 ต่อกับ portRD7



ไฟล์ทั้งหมด
http://www.tempf.com/getfile.php?id=1054573&key=4e7ee02ef2b19
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #5 เมื่อ: กันยายน 25, 2011, 05:58:47 PM »

จากพื้นฐานการต่อวงจรแล้ว ยังต้องศึกษาอีกเยอะ
ไฟล์ที่แนบมาประกอบด้วย

- ไฟล์โปรเจคทั้งหมดที่เขียนด้วย MikroC Pro
- ไฟล์วงจร เขียนด้วย Proteus (ตัว PIC ผมเซตไว้ที่ 1Mhz เพื่อคอมพิวเตอร์จะซิมการทำงานได้)

การทำงานของโค๊ดโปรแกรมคือ
แสดงตัวเลขขึ้นทีละ 1 ค่าต่อ 1 วินาที จาก 0000 ถึง 1000 โดยการนับด้วย TMR0 ลองโหลดไปศึกษาดู

http://www.4shared.com/file/x5vQY-9G/counter4digit.html
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #6 เมื่อ: กันยายน 25, 2011, 07:37:53 PM »

ขอบพระคุณเป็นอย่างสูงครับพี่


ขออีกหน่อยครับ

void show_display(void){   // scan display 4 digit
   char col1, col2, col3, col4;
   col1=count/1000;
   col2=(count/100)%10;
   col3=(count/10)%10;
   col4=count%10;

ไม่เข้าใจตรงนี้ครับ

เข้าใจว่า / หมายถึงหาร แต่ว่าทำไมต้องหาร 1000,100,10
แล้ว % หมายถึงอะไรครับ

ชี้แนะหน่อย
บันทึกการเข้า
kiano♥
kiano555@gmail.com
กลุ่มสนับสนุนLSV+มีน้ำใจ
member
****

คะแนน337
ออฟไลน์ ออฟไลน์

กระทู้: 570


การให้น่าภูมิใจกว่าได้รับ Line ID : Tech64

kiano555@windowslive.com kiano555@yahoo.com
เว็บไซต์ อีเมล์
« ตอบ #7 เมื่อ: กันยายน 25, 2011, 09:39:17 PM »

ตัวแปร count ถูกกำหนดเป็นแบบ 16 บิต มีค่าตั้งแต่ 0 ~ 65535 แต่ให้มันนับเลขแค่ 0 ~ 1000 นั่นก็คือ 4 หลัก
ตัวแปร col1 col2 col3 col4 คือตัวแปรของค่าที่จะแสดงผลแต่ละหลัก

ถ้าให้ตัวแปร count มีค่า 0962
col1 คือค่าของหลักพัน col1=count/1000;         ตัวแปร col1 จะมีค่าเท่ากับ 0962/1000=0
col2 คือค่าของหลักร้อย col2=(count/100)%10; ตัวแปร col2 จะมีค่าเท่ากับ 0962/100=09    09%10=9
col3 คือค่าของหลักสิบ col3=(count/10)%10;    ตัวแปร col3 จะมีค่าเท่ากับ 0962/10=096   096%10=6
col4 คือค่าของหลักหน่วย col4=count%10;        ตัวแปร col4 จะมีค่าเท่ากับ 0962%10=2

% คือตัวดำเนินการทางคณิตศาสตร์ ของพื้นฐานของภาษาซี หมายถึงการหารเอาเศษ
บันทึกการเข้า
Dumrong007
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 87


อีเมล์
« ตอบ #8 เมื่อ: กันยายน 26, 2011, 12:16:25 AM »

แจ่ม
ขอคุณครับพี่ ขอบคุณ
บันทึกการเข้า
yanyongs
member
*

คะแนน0
ออฟไลน์ ออฟไลน์

กระทู้: 40


« ตอบ #9 เมื่อ: มกราคม 31, 2012, 12:47:25 PM »

วิธีการต่อ sw น้า ใช้ไม่ได้ครับ
เวลา กด ตัวหนึง มันจะเป็นกด ทั้ง 3 ไม่แตกต่างครับ  ping!
ผมจะใส่ตัวอย่าง แต่ลงรูปไม่เป็น  sleep!!
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป:  

Powered by MySQL Powered by PHP Powered by SMF 1.1 RC2 | SMF © 2001-2006, Lewis Media

lsv2555Please follow the new website at https://www.pohchae.com

Valid CSS!