📄 test.c
字号:
/*
Please documentate in english in order to make it your own!!!
*/
#define SSlow (PORTB &= ~_BV(4))
#define SShigh (PORTB |= _BV(4))
#define lcdcommand(a) (lcdwrite((a), PORTC & 0xFE)); // RS laag - commando instructie
#define lcdverzend(a) (lcdwrite((a), PORTC | 0x01)); // RS hoog - schrijf instructie
#define clearlcd lcdcommand(0x01); // Maak display leeg
#define F_CPU 4000000UL
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include "Commands.c"
void DirectCommand(unsigned char data);
void send(unsigned char data);
void procedure();
void SPI_MasterInit();
void RegisterWrite();
void setAGC();
void setReceivemode();
void Inventory();
void ReadSingleBlock();
void WriteSingleBlock();
void ReadMultipleBlocks();
void WriteMultipleBlocks();
void StayQuiet();
void lcd_init(void);
void lcdstring(char *s);
void lcdwrite(char a, char type);
ISR(INT0_vect){
lcdstring("Ontvangen");
_delay_ms(500);
lcdcommand(0x01);
lcdcommand(0x02);
}
int main(void) {
lcd_init();
DDRD= 0x7D; // Switch input, interrupt 0 input
PORTD=_BV(6); // Reader Pwr Enable high
GICR=_BV(INT0); // Enable interrupt 0
MCUCR=_BV(ISC01)|_BV(ISC00); // sensitive on the rising edge
SPI_MasterInit();
lcdstring("Send");
lcdcommand(0x80 + 0x40);
lcdstring("SPI_MasterInit");
_delay_ms(1000);
lcdcommand(0x01);
lcdcommand(0x02);
RegisterWrite(); // First command
lcdstring("Send");
lcdcommand(0x80 + 0x40);
lcdstring("RegisterWrite");
_delay_ms(1000);
lcdcommand(0x01);
lcdcommand(0x02);
setAGC(); // Second command
lcdstring("Send");
lcdcommand(0x80 + 0x40);
lcdstring("AGC");
_delay_ms(1000);
lcdcommand(0x01);
lcdcommand(0x02);
setReceivemode(); // Third command
lcdstring("Send");
lcdcommand(0x80 + 0x40);
lcdstring("Receivemode");
_delay_ms(1000);
lcdcommand(0x01);
lcdcommand(0x02);
DirectCommand(FIFO); // Clear FIFO
sei(); // Enable interruptmechanism
lcdcommand(0x01);
while(1){
lcdstring("Reading");
lcdcommand(0x80 + 0x40);
lcdstring("RFID TAG");
_delay_ms(500);
lcdcommand(0x01);
lcdcommand(0x02);
ReadMultipleBlocks(); // Read UID in read zone and wait on interrupt
_delay_ms(500);
}
}
void SPI_MasterInit(){
unsigned char tmp=0;
DDRB= _BV(4)|_BV(5)|_BV(7); // Slave select(4), MOSI(5) en SCK(7) are outputs
PORTB |= _BV(6); // Enable MISO pull up
SPCR = _BV(SPE)|_BV(MSTR)|_BV(SPR0); // SPI enable and master mode. SCK = Fcpu/16
SShigh; // Slave select high > See notes. Slave device is deactivated
tmp = SPSR; // Clear status flags
tmp = SPDR;
}
//Notes
/*-----------------------------------------------------------------------------
Mode Configuration Level Description
Slave Always input High Slave deactivated
Low Activated
Master Input High Master activated
Low Master will be switched into slave mode
Output High Master activated
Low Master activated
-------------------------------------------------------------------------------
Master only works with a slave and will generate eight clockcycles while data is transmitting
The SCK output is only active during this process
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -