С функцией получится только на плюсах, там PB0 может быть классом, тогда порт и номер пина он хранит как константы и в функцию их передавать не нужно:
Код: Выделить всё
PB1 led;
led.write(0);
PB5::write(1);Код: Выделить всё
PB1 led;
led.write(0);
PB5::write(1);Код: Выделить всё
PB1 led;
led=1;Код: Выделить всё
/* Attiny85 */
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
//----
enum { LOW, HIGH };
enum { INPUT, OUTPUT };
//----
template <typename T>
void digitalWrite(T pin, uint8_t val){
if(!val) {
__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
} else {
__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
}
}
//----
template <typename M>
void pinMode(M pin, uint8_t mode ){//mode: INPUT, OUTPUT
if(!mode) {
__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)-1), "I" (pin) );
} else {
__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)-1), "I" (pin) );
}
}
//--------
int main(void){
pinMode(PB0, OUTPUT);
while (1) {
digitalWrite(PB0, HIGH); // зажигаем светодиод
_delay_ms(50); // ждем
digitalWrite(PB0, LOW); // выключаем светодиод
_delay_ms(50); // ждем
}
}Сомнительно. Т.к. как не раз уже вам написали, компилятор Си и так бы нормально всё сделал.Самый быстрый в мире
Код: Выделить всё
void digitalWrite(volatile uint8_t *port, uint8_t pin, uint8_t val){
if(!val){ (*(port)) &= ~(1<<pin); }
else { (*(port)) |= (1<<pin); }
}Код: Выделить всё
uint8_t digitalRead(volatile uint8_t *port, uint8_t pin){
return !!( (*(port-2)) & (1<<pin) );
}Код: Выделить всё
template <typename K>
uint8_t digitalRead(K pin){
uint8_t result;
__asm__ __volatile__("inb %[retval], %[pin]" :[retval] "=a" (result) : [pin] "I" (_SFR_IO_ADDR(DDRB)-2) );
return result;
}Код: Выделить всё
template <typename T>
void digitalWrite(T pin, uint8_t val){
if(!val) {
__asm__ __volatile__("cbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
} else {
__asm__ __volatile__("sbi %0, %1" :: "I" (_SFR_IO_ADDR(DDRB)), "I" (pin) );
}
}Код: Выделить всё
template <uint8_t pin>
void digitalWrite(bool val){Код: Выделить всё
digitalWrite<PB0>(HIGH)https://ru.wikipedia.org/wiki/Однокрист ... контроллерОлегыч1 писал(а):чем по сути отличается микроконтроллер от микропроцессора?
Это значит что в микроконтроллере 8-ми битный микропроцессор. Устаревший на данный момент. Ориентируйтесь на 32 бита если нужны современные микроконтроллеры.Олегыч1 писал(а):А ниже написано BJ8P508/153 is an 8-bit microprocessor with low-power and high-speed CMOS technology
Нет, это вы не поняли суть. Это примерно тоже что если бы вы написалиОлегыч1 писал(а):Короче производители и сами точно не уверены к чему отнести данную микросхему
Абсурд, согласны?В компе 32-ух битный пароцессор. Короче производители и сами точно не уверены это компьютер или процессор.
Процессор только выполняет инструкции. Он не содержит памяти и периферии.Олегыч1 писал(а):сильной принципиальной разны получается и нет.
современный пентиум или там что еще - микроконтрроллер, получается?Мурик писал(а):Процессор только выполняет инструкции. Он не содержит памяти и периферии.
В микропроцессоре это всё тоже есть. По ссылке, что я дал, по сути всё разобрано.Если кратко, то в состав микроконтроллера входит микропроцессор, память (постоянная и оперативная), периферия и др. модули например задающий генератор, умножитель частоты и т. д.
Пентиум это что однокристальный контроллер или много других микросхем требует? В нем есть ПЗУ и ОЗУ (кеши не в счет)? Это будет ответ на вопрос.ARV писал(а):современный пентиум или там что еще - микроконтрроллер, получается?
Покажите где именно в этом есть https://ru.wikipedia.org/wiki/КР580ВМ80АparovoZZ писал(а):В микропроцессоре это всё тоже есть.