Files
SyncHome/trunk/MPLABXProjects/16F874.X/main_16f874.c
paolo.iocco e51d00d234
2023-03-09 10:05:56 +00:00

116 lines
1.9 KiB
C

/*
* File: main.c
* Author: topicchi
*
* Created on 12 maggio 2013, 15.38
*
* PIC16F874A
*
*/
#pragma config FOSC = HS, WDTE = OFF, CP = OFF, PWRTE = OFF, LVP = OFF, DEBUG = ON
/* Definizione della frequenza di funzionamento */
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "main.h"
#include "lcd_hd44780.h"
#define BAUD 9600
#define FOSC _XTAL_FREQ
#define RX_PIN TRISC7
#define TX_PIN TRISC6
void init_comms(void)
{
RX_PIN = 1;
TX_PIN = 1;
// compute the divider for speed (see page 161)
SPBRG = ((int)(FOSC/(16UL * BAUD) -1));
// Asynchronous mode (TXSTA)
SYNC = 0;
// 8 bits reception (RCSTA)
RX9 = 0;
// enable the receiver (RCSTA)
CREN = 1;
// High baud rate select (TXSTA)
BRGH = 1;
// 8 bits transmission (TXTSA)
TX9 = 0;
// enable transmission (TXTSA)
TXEN = 1;
// enable the Serial Port (RCSTA)
SPEN = 1;
}
void uart_putc(unsigned char byte)
{
/* output one byte */
while(!TXIF) /* set when register is empty */
continue;
TXREG = byte;
}
unsigned char uart_getc() {
/* retrieve one byte */
while(!RCIF) /* set when register is not empty */
continue;
return RCREG;
}
unsigned char uart_getce(void)
{
unsigned char c;
putch(c = getch());
return c;
}
/* uart_puts(): scrive una stringa sulla porta seriale*/
void uart_puts(char *s)
{
while (*s) {
uart_putc(*s);
s++;
}
}
/*
* Programma principale
*/
int main(int argc, char** argv) {
char i;
// No interrupts.
INTCON=0;
TRISB = 0x00;
PORTB = 0x00;
TRISD = 0x00;
PORTD = 0x00;
// Get LCD ready
lcd_init();
lcd_goto(0x00);
lcd_puts("* Love *");
lcd_goto(0x40);
lcd_puts(" Silvia");
// Get the UART ready
init_comms();
while(1) // Run Forever
{
for (i = 0; i<8; i++) {
PORTB=15-i;
__delay_ms(50);
}
uart_putc('a');
}
return (EXIT_SUCCESS);
}