I'm just starting with micro-controllers, so I would like to ask someone more advanced if the code that I've written for these 2 tasks is feasible. It is for the PIC16F917 MICROCONTROLLER
Thank you for your time
Task 1
Use port D of the PIC16F917A as an output port, write a simple program to control 8 LEDS to generate the binary-equivalent of the following decimal numbers:
119, 76, 14, 55 & 99
CODE:
#include <htc.h>
__CONFIG(UNPROTECT & BORDIS & PWRTEN & WDTDIS & INTIO & MCLREN & FCMDIS & IESODIS);
#define _XTAL_FREQ 8000000
void init(void)
{
// port directions: 1=input, 0=output
TRISD = 0x00;
// 8Mhz Internal Clock
OSCCON = 0b01110000;
// Clear PORTD
PORTD = 0x00;
}
void main(void)
{
init();
start:
RD0=1;
RD1=1;
RD2=1;
RD5=1;
RD6=1;
RD7=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD2=1;
RD3=1;
RD6=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD1=1;
RD2=1;
RD3=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD1=1;
RD2=1;
RD4=1;
RD5=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD0=1;
RD1=1;
RD5=1;
RD6=1;
goto start;
}
Taks 2
Use a switch as an input to read the status of bit 0 of port A, write a program to switch all odd numbered LEDs (the most right hand LED is number 0) connected to port D, upon detecting the switch closure.
#include <htc.h>
__CONFIG(UNPROTECT & BORDIS & PWRTEN & WDTDIS & INTIO & MCLREN & FCMDIS & IESODIS);
#define _XTAL_FREQ 8000000
void init(void)
{
// port directions: 1=input, 0=output
TRISD = 0x00;
TRISA = 0xFF;
// 8Mhz Internal Clock
OSCCON = 0b01110000;
// Clear PortD
PORTD = 0x00;
// Turn off comparators
CMCON0 = 0x07;
//Turn off ADC
ANSEL = 0x00;
}
void main(void)
{
init();
start:
while (1){ while(RA0) //Wait while switch off
{ __delay_ms(1); } //Debounce switch
while(!RA0) //Wait while switch on
{ __delay_ms(1); } //Debounce switch
// Switch ON PORTD
PORTD = 0b010101010;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00; // XOR (Flip) PORTD
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
goto start;
}
}
Thank you for your time
Task 1
Use port D of the PIC16F917A as an output port, write a simple program to control 8 LEDS to generate the binary-equivalent of the following decimal numbers:
119, 76, 14, 55 & 99
CODE:
#include <htc.h>
__CONFIG(UNPROTECT & BORDIS & PWRTEN & WDTDIS & INTIO & MCLREN & FCMDIS & IESODIS);
#define _XTAL_FREQ 8000000
void init(void)
{
// port directions: 1=input, 0=output
TRISD = 0x00;
// 8Mhz Internal Clock
OSCCON = 0b01110000;
// Clear PORTD
PORTD = 0x00;
}
void main(void)
{
init();
start:
RD0=1;
RD1=1;
RD2=1;
RD5=1;
RD6=1;
RD7=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD2=1;
RD3=1;
RD6=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD1=1;
RD2=1;
RD3=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD1=1;
RD2=1;
RD4=1;
RD5=1;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
RD0=1;
RD1=1;
RD5=1;
RD6=1;
goto start;
}
Taks 2
Use a switch as an input to read the status of bit 0 of port A, write a program to switch all odd numbered LEDs (the most right hand LED is number 0) connected to port D, upon detecting the switch closure.
#include <htc.h>
__CONFIG(UNPROTECT & BORDIS & PWRTEN & WDTDIS & INTIO & MCLREN & FCMDIS & IESODIS);
#define _XTAL_FREQ 8000000
void init(void)
{
// port directions: 1=input, 0=output
TRISD = 0x00;
TRISA = 0xFF;
// 8Mhz Internal Clock
OSCCON = 0b01110000;
// Clear PortD
PORTD = 0x00;
// Turn off comparators
CMCON0 = 0x07;
//Turn off ADC
ANSEL = 0x00;
}
void main(void)
{
init();
start:
while (1){ while(RA0) //Wait while switch off
{ __delay_ms(1); } //Debounce switch
while(!RA0) //Wait while switch on
{ __delay_ms(1); } //Debounce switch
// Switch ON PORTD
PORTD = 0b010101010;
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
PORTD = 0x00; // XOR (Flip) PORTD
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(98);
__delay_ms(20);
goto start;
}
}