• Открываем его обычным блокнотом или специализированным с подсветкой синтаксиса (очень удобный вариант).
К примеру, задача: на выбраном порту, скажем PORTC, нужно устанавливать и сбрасывать первый разряд PC0 используя две Си команды, определенными из библиотеки structs.h, о которой речь пойдет ниже.
.equ __io_direction=__io_port-1 // указываем из основной программы порт, который
// будет использован
// #asm
// .equ __io_port=0x15; PORTC
// #endasm
#endasm
// функция для установки разряда Pn0 в лог. 1
void io_enable(void){
#asm // директива указывает на ассемблерную вставку
sbi __io_port,0 // выглядит как sbi 0x15,0
#endasm // конец ассемблерной вставки
}
// функция для установки разряда Pn0 в лог. 0
void io_disable(void){
#asm
cbi __io_port,0
#endasm
}
Теперь создаем заголовочный файл с расширением *.h — structs.h
Его надо указывать из основной Си программы как — #include <structs.h>
Код заголовочного файла structs.h выглядит так:
// что именно не разобрался, но так надо
#ifndef _structs_INCLUDED_
#define _structs_INCLUDED_
#pragma used+
// функции, которые будут указаны в программе
void io_enable(void);
void io_disable(void);
#pragma used-
#pragma library structs.lib // ссылка на библиотеку *.lib
#endif
Основная программа:
// CodeVision AVR 1.25.3
#include <mega8.h>
#asm
.equ __io_port=0x15;PORTC // Какой порт используется
#endasm
#include // указываем заголовочный
//файл, который написан выше
#include <delay.h>
void main(void){
DDRC=0x01;
while(1){
io_enable(); // устанавливаем разряд PC0
delay_ms(100);
io_disable(); // Сбрасываем разряд PC0
delay_ms(100);
}
}
Библиотека *.lib может быть с любым количеством кода, который программист пишем для решения определенных задач. Можно, к примеру, создать библиотеку для работы с внешней памятью ОЗУ (SRAM) или, к примеру, для функционального пред-устройства на МК, который будет подключен к основному устройству и по командам будет осуществляться работа:
init();
set();
reset();
write();
read();
disable();
enable();
Спасибо за внимание, желаю успехов!
Автор: Skiff