8051 Mikrodenetleyicisinde sayıcı zamanlayı sorunu

per-unit

Üye
Katılım
9 Ara 2014
Mesajlar
76
Puanları
1


TMOD = 0x01;
ET0 = 0;
TH0 = 0x3C;
TL0 = 0xB0;
TF0 = 0;
TR0 = 1;
while (TF0 == 0);
TR0 = 0;

Bu kod 50ms gecikme için yazılmış frekansı 12 Mhz alınmış.
Yukarıdaki resimden TMOD ayarlıyorlarmış bunun nasıl yapıldığını ve resimin tam olarak nasıl okunduğunu bilen arkadaşlar bildiklerini paylaşabilir mi?

Birde buradaki TF0, TR0 ne demek oluyor çalışma mantığı nedir?

Program olarak keil kullanıyorum elinde bu konuyu düzgün bir şekilde anlatan Türkçe kaynağı olan arkadaşlar paylaşabilirse benim gibi bu konuları öğrenmek isteyenlere yararlı olacaktır.
 
Timer ayarlanıyor. 0x3cb0 desimal olarak 15536 yapar. Buradan yukarı sayacak sayıcı. 65536-15536=50000 yapar. Osilatör 12mhz ama sayıcı için 12 ye bölünmüş yani 1mhz. 50000 e 1 mhz ile 50ms de ulaşılır. 50 ms sonunda timer0 bayrağı kalkar yani TF0=1 olur. TR0 ise ayarlar yapıldıktan sonra sayıcının başlaması içindir. TR0=1 dediğin an sayma başlar

2 sayıcı var alette timer0 ve timer1. 0 ve 1 bunları temsil ediyor. Burada timer0 kullanılmış ama timer1 de kullanılabilir

TMOD=1 diyerek timer0 mod1 olarak ayarlanır yani 16bit lik sayıcı.
 
Son düzenleme:

Öncelikle ilginiz için tsk.
While içindeki TR=0 timer durduruyor ise timer sadece bir kere çalışıyor. Metot oluşturup ilgili yerlerde çağırmazsak tek kullanımlık. Kesiciler ile yapılan timer kullanımı gibi başa dönüp saydırmıyor. Bu kısımda eksiğim yada yanlışım var mı?
Yoksa benim asıl sorunum; TMOD ayarı dışarıdan durdurmak, başlatmak ve buton'a bastıkça timer saydırmak istendiğinde GATE,C/T,P3.4,P3.2,TCON gibi değeler ne ifade ediyor ve resimdeki blog diyagramına göre bu ayarlama nasıl yapılıyor.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…