ища школа, 1990. - 224 с. p> 4. Калабеков Б.А., Мамзелев І.А. Цифрові пристрої і мікропроцесорні системи: Підручник для технікумів зв'язку. - М.: Радіо і зв'язок, 1987. - 400 с. p> 5. Мікропроцесори та мікроЕОМ в системах автоматичного управління: Довідник/С.Т.Хвощ, Н.Н.Варлінскій, Е.А.Попов; За заг. ред. С.Т.Хвоща. - Л.: Машинобудування, 1987. - 640 с. p> 6.
Додаток А. Лістинг керуючої програми . include "m16def.inc"; Включити визначення для контролера Atmega16
. def scancode = r13
. def key = r14
. def pointer = r15; використовується для введення даних
. equ entercode = 0xD7; код клавіші введення
. DSEG; резервування пам'яті
status:. BYTE 1; байт статусу
weight:. BYTE 2; вага
price:. BYTE 2; ціна
cost:. BYTE 2; вартість
key_table. BYTE 10; таблиця сканкодов
dysplay_table:. BYTE 16; виділити 16 байт як буфер дисплея
. CSEG
; перед початком виконання програми контролер перевіряє вектори переривань
rjmp RESET; Reset Handler
nop
reti EXT_INT0; INT0 Handler
nop
reti EXT_INT1; INT1 Handler
nop
reti TIM2_COMP; Timer2 Compare Handler
nop
reti; TIM2_OVF; Timer2 Overflow Handler
nop
reti; TIM1_CAPT; Timer1 Capture Handler
nop
reti; TIM1_COMPA; Timer1 CompareA Handler
nop
reti; TIM1_COMPB; Timer1 CompareB Handler
nop
reti; TIM1_OVF; Timer1 Overflow Handler
nop
reti; TIM0_OVF; Timer0 Overflow Handler
nop
reti; SPI_STC; SPI Transfer Complete Handler
nop
reti; USART_RXC; USART0 RX Complete Handler
nop
reti; USART_DRE; USART0, UDR Empty Handler
nop
reti; USART_TXC; USART0 TX Complete Handler
nop
reti; ADC; ADC Conversion Complete Handler
nop
reti; EE_RDY; EEPROM Ready Handler
nop
reti; ANA_COMP; Analog Comparator Handler
nop
reti; TWI; Two-wire Serial Interface Interrupt Handler
nop
reti; TIM0_COMP; Timer0 Compare Handler
nop
reti; EXT_INT2; INT2 Handler
nop
reti; SPM_RDY; SPM Ready Handler
nop
; ініціалізація
reset: out DDRB, 0xF0; Старша тетрада порту PB налаштовується на висновок, молодша - на введення
out DDRС, 0xFF; Порти PC і PB налаштовуються на висновок
out DDRD, 0xFF;
out ADMUX, 0x40; АЦП працює із зовнішнім опорним сигналом, канал 0. p> out SFIOR, 0x00; АЦП працює автоматичного оновлення даних. p> out ADCSRA, 0xC0; Запуск АЦП. p> ldi r26, low (key_table); заповнення таблиці скан-кодів
ldi r27, high (key_table)
ldi r16, 0xE7; клавіша В«0В»
st X +, r16
ldi r16, 0xEE; клавіша В«1В»
st X +, r16
ldi r16, 0xDE; клавіша В«2В»
st X +, r16
ldi r16, 0xBE; клавіша В«3В»
st X +, r16
ldi r16, 0xED; клавіша В«4В»
st X +, r16
ldi r16, 0xDD; клавіша В«5В»
st X +, r16
ldi r16, 0xBD; клавіша В«6В»
st X +, r16
ldi r16, 0xEB; клавіша В«7В»
st X +, r16
ldi r16, 0xDB; клавіша В«8В»
st X +, r16
ldi r16, 0xBB; клавіша В«9В»
st X +, r16
; опитування клавіатури
begin: ldi scancode, 0xFF
ldi r19, 0x00; обнуління лічильника дляантідребезговой циклу
l3: ldi r16, 0x01; задається опрашиваемая лінія
l1: mov r17, temp1; номер опитуваної лінії перетворюється для обнулення
neg r17; відповідного висновку
out PORTB, r17
in r17, PINB; читання сканкода
ori r17, 0x80
cpi r17, 0xFF; якщо клавіша натиснута, то запам'ятати її сканкод для
breq l4; обробки в дляантідребезговой циклі
mov r18, r17
l4: lsl r16; наступна лінія
cpi r16, 0x10
brne l1; якщо опитані всі лінії, переходимо до наступного кроку
cpi r19, 0x00
breq l2
cp r18, scancode
brne l5; якщо поточний скан-коду не дорівнює попередньому, то натискання випадкове
l2: mov scancode, r18
inc r19
cpi r19, 0x03; дляантідребезговой цикл
brne l3
; опитування режиму
l5: ldi r26, low (status)
ldi r27, high (status)
ld r16, X; завантажується адреса байта стану
cpi r16, 0x01
breq l6; якщо status = 1, то перейти до введення даних
cpi scancode, entercode; якщо не натиснуто В«ВведенняВ»,
brne l7; то перейти перерахуванню даних
ldi r16, 0x01; інакше увійти в режим введення даних
st X, r16
ldi r16, 0
move point...