
Программирование приема информации от датчика
Рассмотрим пример измерения угловой скорости ротора электродвигателя при помощи обтюратора (диск со щелями), прерывающего световой поток в оптронной паре.
П
усть
накопление импульсов осуществляется
в течении
0,1 c, а обтюратор содержит 24 щели. Тогда угловой скорости вращения ротора 1000 об/мин соответствует частота импульсов на выходе обтюратора 400 Гц:
Из-за отсутствия синхронизации и из-за погрешности изготовления обтюратора в разных циклах счета при этой скорости может накопиться от 39 до 41 импульса. 400 Гц * 0,1 с =40 импульсов.
Если угловая скорость ротора не превышает 10 000 об/мин, что соответствует частоте f=4кГц или 400 импульсам, то для хранения скорости следует выделить два байта omgl и omgh.
О
стальные
условия задачи совпадают с предыдущими:
Накопление импульсов идет в течение 0,1 с = 100 мс. Прерывания по условиям прошлой задачи возникают каждые 10 мс. Поэтому считывание счетчика 1 нужно выполнять один раз через 10 прерываний.
Дополним блок инициализации:
mov TMOD, #0D1h
mov TL1, #0
mov TH1, #0 ;сброс счетчика в 0
mov ten, #10 ;счетчик числа прерываний
Дополним срочную задачу:
main: …
dec ten ;счётчик для перехода от 10 мс к 100 мс
mov A, ten ;для проверки содержимого счётчика
jnz noten ;переход в 9 циклах из 10
clr TR1 ;остановка счётчика 1
mov omgl, TL1 ;чтение младшего байта скорости
mov omgh, TH1 ;чтение старшего байта скорости
mov TL1, #0 ;
mov TH1, #0 ;обнуление
setb TR1 ;запустить счётчик
mov ten, #10 ;
noten: nop ;продолжение программы