125
Таблица 6.1. Окончание
|
Старший разряд |
PD0 |
РС5 |
РС4 |
РСЗ |
РС2 |
РС1 |
РСО |
Код |
|
5 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
6D |
|
6 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
7D |
|
7 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
07 |
|
8 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7F |
|
9 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
6F |
|
Таблица 6.2. Преобразование двоично-десятичного значения в семисегментный код для младшего разряда |
||||||||
|
Младший разряд |
РВЗ |
РВ2 |
РВ1 |
РВО |
PD7 |
PD6 |
PD5 |
Код |
|
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
7Е |
|
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
30 |
|
2 |
1 |
1 |
1 |
1 |
0 |
1 |
6D |
|
|
3 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
79 |
|
4 |
0 |
1 |
1 |
0 |
1 |
1 |
33 |
|
|
5 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
5В |
|
6 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
5F |
|
7 |
1 |
1 |
1 |
0 |
0 |
70 |
||
|
8 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7F |
|
9 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
7В |
Программа на ассемблере представлена в листинге 6.1, а шестна-дцатеричный код — в листинге 6.2. Соответствующие файлы term75. asm и term75.hex находятся на прилагаемом к книге компакт-диске в папкеПрограммьЛОб - Термометр. Листинг 6.1. Программа управления термометром
.include "C:\Program Files\Atmel\Avr Studio\Appnotes\m8def.inc"
;Азтор: Кразченко А.В.
.-Дата: 5.01.2008
.•Версия: 1.0.4
;Имя файла: term75.asm
.•Микроконтроллер: ATmega8
;Тактовая частота: 1.ОмГц
.•Питание: нестабилизирозанное 5 В
.list
126
Глава 6
Листинг 6 ' Продолжение
;***** Регистровые переменные
|
def |
tmp |
= |
rl6 |
|
def |
tmpl |
= |
rl7 |
|
def |
tmp2 |
= |
rl8 |
|
def |
Fig |
= |
rl9 |
|
def |
Dig21 |
= |
r20 |
|
def |
tmp3 |
= |
r21 |
|
def |
tt2 |
= |
r22 |
|
def |
Dig43 |
= |
r23 |
|
def |
dbyt |
= |
r24 |
|
def |
adr |
= |
rO |
|
def |
prgl |
= |
r25 |
|
def |
prg2 |
= |
r26 |
|
def |
tmp3 |
= |
r27 |
|
def |
tmp 4 |
= |
r28 |
Рабочий регистр
Рабочий регистр Рабочий регистр
; Флаги в регистре Fig:
. equ Аск = 0 ; Флаг квитирования = разряд О ; Входы/выходы I2C:
.equ SDA = РВ4 ; SDA - порт В / разряд О
.equ SCL = РВ5 ; SCL = порт В / разряд 1
; Адреса ведомых устройств I2C:
.equ TempAdr = ; Адрес Ш75
;Начало области памяти, вектор прерывания . org 0
|
rjmp |
RESET |
||
|
пор |
;rjmp |
INTO |
|
|
пор |
;rjmp |
INT1 |
|
|
пор |
; rjmp |
TIMER2 |
COMP |
|
пор |
;rjmp |
TIMER2 |
OVF |
|
пор |
; rjmp |
TIMER1 |
CAPT |
|
пор |
; rjmp |
TIMER1 |
COMPA |
|
пор |
; rjmp |
TIMER1 |
COMPB |
|
пор |
; rjmp |
time |
|
|
пор |
; rjmp |
TIMERO |
OVF |
|
пор |
;rjmp |
SPI, STC |
|
|
пор |
;rjmp |
USART, |
RXC |
|
пор |
;rjmp |
USART, |
UDRE |
|
пор |
; rjmp |
USART, |
TXC |
|
пор |
;rjmp |
ADC |
|
|
пор |
;rjmp |
EE RDY |
|
|
пор |
; rjmp |
ANA_COM? |
|
|
пор |
; rjmp |
TWI |
|
Простой термометр
127
Листинг 6.1. Продолжение
nop ;гjmp SPM_RDY
|
/Начало зсей программы без |
вектора прерывания |
|
|
.org 22 |
||
|
;настройка |
портов 3, С, D |
|
|
RESET: пор |
||
|
clr |
tmp |
|
|
clr |
tmpl |
|
|
;зыходы на |
дисплей |
|
|
ldi |
tmpl, $FF |
;Порт В,-выходы |
|
out |
DDRB, tmpl |
|
|
out |
PORTB, tmp |
/обнулить порт В |
|
;выходы на |
дисплей |
|
|
ldi |
tmp2, F |
|
|
out |
DDRC, tmp2 |
/Порт С-зыходы |
|
out |
PORTC, tmp |
/Обнулить порт С |
|
;зыходы на |
дисплей |
|
|
ldi |
tmp3, $FF |
/Порт D-выходы |
|
out |
DDRD, tmp3 |
|
|
ldi |
tmp, E |
/символ градуса Цельсия |
|
out |
PORTD, tmp |
/установить порт D |
|
;установка |
верхнего урозня |
стека |
|
clr |
tmp |
|
|
ldi |
tmp, high(RAMEND) |
|
|
out |
SPH, tmp |
|
|
ldi |
tmp, low(RAMEND) |
|
|
out |
SPL, tmp |
|
:сброс всех значений cli
/общий запрет прерываний
/Начало программы nStart: пор
rcall res
| НА ГЛАВНУЮ | | ЧТО ТАКОЕ PIC ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |