Главная  Микроконтроллеры 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [ 38 ] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

Использование встроенного EEPROM

Материал взят из демонстрационной версии компилятора Code-VisionAVR С Compiler, автором которого является Pavel Haiduc, HP InfoTech S.R.L.

Текст программы:

Контроллер: AT90S2313

Модель памяти: TINY

Размер стека данных: 64 bytes

flash char f[]="This is a test"; Spragma warn-eeprom char e[16];

Spragma warn+ char r[16];

void main (void) «

char flash -ptr.to.flash; char eeprom •ptr to eeprom; char •ptr to ran;

Копировать строку f из FLASH в строку e в EEPROM ptr to flash=f; ptr to eeprom=e; while (-ptr.to.flash)

«ptr to eeprom++=«ptr to flash++;

Копировать строку e из EEPROM в

строку г в оперативной памяти

ptr to eeprom=e;

ptr to ram=r;

while (*ptr to eeprom)

•ptr to ram++=:*ptr to eeprom++;

Стоп (бесконечный цикл)

while (1);

Работа с клавиатурой 4x4



PDO PD1 PD2 РОЗ PD4 PD5

R1-R4 470


VD1-VD4flSE

Рис. 4.11. Схема соединения клавиатуры 4x4

Для индикации использован 2 х 16 алфавитно-цифровой ЖКИ, подсоединенный к порту PORTC следующим образом:

PORTC

- 9

- 10

LCD HEADER Vo

- 1

- 2

- 3

- 5

- 6

- 7

- 8

Текст программы:

ttasm

• equ lcd port=0x15 #endasm

Binclude <lcd.h> Binclude <stdio.h> Binclude <delay.h> Binclude <90sB515.h>

Частота кварцевого резонатора [Гц] Bdefine F XTAL 4000000L Линии PINDO...3 будут входами строк Bdefine KEYIN PIND

Линии P0RTD4..7 будут выходами столбцов Bdefine KEYOUT PORTD



II Инициализация использованного таймера TIHERO ((define INIT TIHERO rCNr0=0x100L-F XTAL/64L/500L ((define FIRST.COLIHN 0x80 ((define LAST C0LlHN 0x10

typedef unsigned char byte;

Здесь в виде бита сохраняется состояние каждой нажатой клавиши,

бит О будет KEY0, бит 1 KEY1,...

unsigned keys;

Буфер ЖКИ-индикатора

char buf[33];

Прерывание по таймеру TIMER О каждые 2 мс interrupt [TIH0 0VF] void timerO int(void) {

static byte key pressed counter=20;

static byte key released counter,column=FIRST COLUHN;

static unsigned row data.crt key;

Перезагрузить таймер TIHERO

INIT TIHER0;

row data«=4;

Получить группу из 4 клавиш в переменной row data

row data="KEYIN&Oxf;

column»=1;

if (column==(LAST C0LlHN»1)) {

column=FIRST COLlHN; if (row data==0) goto new key; if (key released counter) --key released counter; else {

if (--key pressed counter==9) crt key=row data; . else {

if (row data!=crt key) {

new key;

key pressed counter=10; key released coijnter=0; goto end key; };

if (!key pressed coLnter) (

keys=row data; key released. count er =20; }; >;

>;

end key:;



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [ 38 ] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93]

0.0018