hc164.h
Code
#ifndef _hc164_h_
#define _hc164_h_
//#asm
//.equ __hc164_port=0x18 //PORTB ATmega8
//.equ __hc164_data=0
//.equ __hc164_clk=1
//#endasm
//#include "hc164.h"
void hc164_init();
void hc164_wr(unsigned char mas[],unsigned char mas_index);
#pragma library hc164.c
#endif
hc164.c
Code
void hc164_init() {
#asm
sbi __hc164_port,__hc164_clk
sbi __hc164_port-1,__hc164_data
sbi __hc164_port-1,__hc164_clk
#endasm
}
void hc164_wr(unsigned char mas[],unsigned char mas_index) {
#asm
ldd r26,y+1
ldd r27,y+2
ld r30,y
add r26,r30
clr r30
adc r27,r30
ld r30,x
ldi r31,8
__hc164_next_bit:
sbrc r30,0
sbi __hc164_port,__hc164_data
sbrs r30,0
cbi __hc164_port,__hc164_data
nop
nop
lsr r30
cbi __hc164_port,__hc164_clk
nop
nop
sbi __hc164_port,__hc164_clk
nop
nop
dec r31
brne __hc164_next_bit
#endasm
}
используем так:
Code
#asm
.equ __hc164_port=0x18 //PORTB ATmega8
.equ __hc164_data=0
.equ __hc164_clk=1
#endasm
#include "hc164.h"
..........
hc164_init();
..........
hc164_wr([mas],[index]);