0% found this document useful (0 votes)
11 views11 pages

ADC_UART

Download as pdf or txt
0% found this document useful (0 votes)
11 views11 pages

ADC_UART

Download as pdf or txt
Download as pdf or txt
You are on page 1/ 11

main * - Printed on 12/2/2024 03:54:03 PM

//---------------TIMER 7 DOAN TU DONG DEM---------------------------


#include "msp430f5529.h"
#define DLED P3OUT

//prototype
void scanled();
void printled();
void delayms(int ms);
//khai bao bien
char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 0; // Con tro quet led
int timer = 0;
int dem = 0;
char state = 0;
int delay = 0;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_3 + MC_1; //SMCLK-DIV8-UP MODE
TA0CCTL0 = CCIE;
TA0CCR0 = 250; //2ms
__bis_SR_register(GIE); //cho phep ngat toan cuc

//GP IO
P3DIR = 0xFF;
P6DIR = 0x0F;

//MAIN LOOP
while(1){
while(state == 0);
dem++;
printled();
state = 0;
if(dem >= 20){
while(delay < 1000);
}
}
}

//chuong trinh con phuc vu ngat


#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
scanled();
timer++;
if(timer >= 100){
timer = 0;
state = 1;
}
if(dem >= 20){
delay++;
if(delay >= 1000) delay = 1000;
}
}
//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
P6OUT = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;
}
// HIEN THI LED 7 DOAN
void printled(){
buff[3] = dem/1000;
buff[2] = (dem%1000)/100;
buff[1] = ((dem%1000)%100)/10;
buff[0] = dem%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)

Page 1
main * - Printed on 12/2/2024 03:54:03 PM
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:49:12 PM
//--------------ADC 1-----------------------------------------
#include "msp430f5529.h"
#define DLED P3OUT
#define CTR P6OUT
#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

#define VR3 5
#define VR2 6
#define VR1 7

//prototype
void scanled();
void delayms(int ms);
void toDisplay(int dat);
unsigned int ReadADC12(int channel);

//khai bao bien


char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 1; // Con tro quet led
unsigned int val;
unsigned char status = 0;

void main( void ){


WDTCTL = WDTPW + WDTHOLD;

//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//MAIN LOOP
while(1){
if ((P2IN & K1) == 0) status = 1;
if ((P2IN & K2) == 0) status = 2;
switch(status){
case 1: val = ReadADC12(VR2); break;
case 2: ADC12CTL0 = 0;
}
toDisplay(val);
// scan to display 7segled
scanled();
delayms(5);
}
}
//CAU HINH ADC
unsigned int ReadADC12(int channel){
ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 |= (ADC12SHT0_2 + ADC12ON);
ADC12CTL1 = ADC12SHP;

ADC12MCTL0 |= channel; //CHON KENH


ADC12CTL0 |= (ADC12ENC + ADC12SC);

while (!(ADC12IFG & BIT0));

unsigned int result = ADC12MEM0;


ADC12CTL0 &= ~ADC12ENC;
return result;
}

//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
CTR = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;

Page 1
main * - Printed on 12/2/2024 03:49:12 PM
}
// HIEN THI LED 7 DOAN
void toDisplay(int dat){
buff[3] = dat/1000;
buff[2] = (dat%1000)/100;
buff[1] = ((dat%1000)%100)/10;
buff[0] = dat%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:53:19 PM
//-------------------------ADC 7 DOAN---------------------------------------
#include "msp430f5529.h"
#define DLED P3OUT
#define CTR P6OUT
#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

#define VR3 5
#define VR2 6
#define VR1 7

//prototype
void scanled();
void delayms(int ms);
void toDisplay(int dat);
void ReadADC12(int channel);

//khai bao bien


char tbl7seg[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char buff[4]= {0,0,0,0}; // vung dem
int idx = 0; // Con tro quet led
unsigned char status = 0;
int timer = 0;
int val = 0;

void main( void ){


WDTCTL = WDTPW + WDTHOLD;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_3 + MC_1; //SMCLK-DIV8-UP MODE
TA0CCTL0 = CCIE;
TA0CCR0 = 625; //5ms
__bis_SR_register(GIE); //cho phep ngat toan cuc

//CAU HINH ADC12


ReadADC12(VR2);
//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//MAIN LOOP
while(1){
if ((P2IN & K1) == 0) status = 1;
if ((P2IN & K2) == 0) status = 2;

toDisplay(val);
}
} //END MAIN

//chuong trinh con phuc vu ngat


#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
scanled();
if(status == 1){
timer++;
if(timer >= 500){
timer = 0;
ADC12CTL0 |= (ADC12ENC + ADC12SC);
val = ADC12MEM0;
ADC12CTL0 &= ~ADC12ENC;
}
}
if(status == 2) ADC12MEM0 = 0;
}

void ReadADC12(int channel){


ADC12CTL0 &= ~ADC12ENC;
ADC12CTL0 |= (ADC12SHT0_2 + ADC12ON);
ADC12CTL1 = ADC12SHP;

Page 1
main * - Printed on 12/2/2024 03:53:19 PM
ADC12MCTL0 |= channel;
}

//QUET LED
void scanled(){
char ch;
ch = buff[idx];
DLED = tbl7seg[ch];
CTR = ~(1<<idx);
idx++;
if (idx>=4) idx = 0;
}
// HIEN THI LED 7 DOAN
void toDisplay(int dat){
buff[3] = dat/1000;
buff[2] = (dat%1000)/100;
buff[1] = ((dat%1000)%100)/10;
buff[0] = dat%10;
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:49:52 PM

//------------------------PWM-----------------------------------------
#include "msp430f5529.h"
// define for PWM
#define F_CPU 1000000UL
#define PWM_PERIOD F_CPU/490
#define PWM_DUTY(x) ((unsigned long)x*PWM_PERIOD / (unsigned long)(0xff))

// khai báo port IO


#define K1 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define LED_R 4 // p1.4 : LED RED
#define LED_G 3 // p1.3 : LED GREEN
#define LED_B 2 // p1.2 : LED BLUE
//------------- Khai báo prototype hàm
void delayms(int ms);
unsigned int ReadADC12();
void SetPWM(unsigned char pin, int val);
//KHAI BAO BIEN
unsigned int val;
unsigned char status = 0;
//---Ð?nh nghia chuong trình chính------------
void main( void ){
WDTCTL = WDTPW + WDTHOLD;

//GP IO
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

// KHOI DONG PWM


TA0CCR0 = PWM_PERIOD; // PWM Period
TA0CTL = TASSEL_2 + MC_1 + ID_0;

// MAIN LOOP
while(1){

if ((P2IN & K1) == 0) status = 1;


if ((P2IN & K2) == 0) status = 2;
if ((P2IN & K3) == 0) status = 3;
switch(status){
case 1: val = ReadADC12()/10;
SetPWM(LED_R,val);
break;
case 2: val = ReadADC12()/10;
SetPWM(LED_G,val);
break;
case 3: val = ReadADC12()/10;
SetPWM(LED_B,val);
break;
}
delayms(50);
} // end while
} // end main
//----Ð?nh nghia các chuong trình con--------
void SetPWM(unsigned char pin, int val){
P1DIR |= (1<<pin);
P1SEL |= (1<<pin);
switch(pin){
case 2: TA0CCTL1 = OUTMOD_7;
TA0CCR1 = PWM_DUTY(val);
break;
case 3: TA0CCTL2 = OUTMOD_7;
TA0CCR2 = PWM_DUTY(val);
break;
case 4: TA0CCTL3 = OUTMOD_7;
TA0CCR3 = PWM_DUTY(val);
break;
}
}
//cau hinh ADC
unsigned int ReadADC12(){
// Vref+ = 3.3V -- protues
//ADC10CTL0 = SREF_1 + ADC10SHT_2 + ADC10ON + REF2_5V + REFON;

Page 1
main * - Printed on 12/2/2024 03:49:52 PM
// Vref+ = 3.3V - thuc te
ADC12CTL0 |= ADC12SHT0_2 + ADC12ON;
ADC12CTL1 |= ADC12SHP + ADC12CONSEQ_0;
//ADC12CTL2 = 0xA2;
ADC12MCTL0 |= ADC12SREF_0 + ADC12INCH_12;
ADC12CTL0 |= ADC12ENC + ADC12SC; // B1: START ADC
while(!(ADC12CTL0 & ADC12IFG0)); // B2: ADC bien doi --> wait
ADC12CTL0 = 0; // OFF ADC
return ADC12MEM0; // B3: doc gia tri bien doi
}
//DELAYMS
void delayms(int ms){
for(int i=0; i<ms ; i++)
__delay_cycles(1000);
}

Page 2
main * - Printed on 12/2/2024 03:51:16 PM
//------------------UART-------------------------------------------------------
#include "io430f5529.h"
#define PLED P3OUT
#define CTR P6OUT
#define K0 BIT3 //P2.3
#define K2 BIT5 //P2.5
#define K3 BIT4 //P2.4
#define K4 BIT3 //P4.3

//prototype
void delayms(int ms);
void uart_io();
//void uart_clock();
void uart_init();
void uart_char(char ch);
void uart_string(const char *s);
void blink(int time);
void UARTSendNum (float number0);

//khai bao bien


// LED 7 DOAN ANODE
int LED7A[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
//vung dem 4 so led 7 doan
unsigned int buff[4] = {0, 0, 0, 0};
int idx = 0;
int state = 0;
char lan = 0;

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

//GP IO
P3DIR = 0xFF; // P3 la OUTPUT
P6DIR = 0x0F; // P6 la OUTPUT
P4DIR |= BIT0; P4OUT &= ~BIT0; //GND
P2REN |= (BIT3 + BIT4 + BIT5);
P2OUT |= (BIT3 + BIT4 + BIT5);
P4REN |= BIT3; P4OUT |= BIT3;

//CAU HINH TIMER


TA0CTL = TASSEL_2 + ID_2 + MC_1;
TA0CCTL0 = CCIE;
TA0CCR0 = 375;
__bis_SR_register(GIE); //cho phep ngat toan cuc

//CAU HINH UART


uart_init();
uart_io();
//MAIN LOOP
while(1){
if((P2IN & K0) == 0){
while((P2IN & K0) == 0);
delayms(100);
lan++;
uart_char(lan+48);
blink(lan);
state ++;
}
if(lan > 8) lan = 0;
}
}

//TRUYEN DU LIEU UART


#pragma vector = USCI_A1_VECTOR
__interrupt void rx(void){
//char tmp = UCA1RXBUF;
}

//chuong trinh con phuc vu ngat


#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void){
}

Page 1
main * - Printed on 12/2/2024 03:51:16 PM

//HAM CHOP TAT LED


void blink(int time){
for(int i=0;i<time;i++){
PLED = 0xFF;
delayms(500);
PLED = 0x00;
delayms(500);
}
}

void delayms(int ms){


for(int i=0; i<ms; i++)
__delay_cycles(1000);
}

void uart_io(){
P4SEL |= (BIT4 + BIT5);
}

void uart_init(){
UCA1CTL0 = 0x00; //KHUNG DU LIEU 8bit, none, 1stop
UCA1CTL1 |= UCSWRST;
UCA1CTL1 |= UCSSEL_2;
UCA1BR0 = 104; //baudrate 9600 1Mhz
UCA1BR1 = 0;
UCA1MCTL = UCBRS_1; //TRUYEN MSB TRUOC
UCA1CTL1 &= ~UCSWRST;
UCA1IE |= (UCRXIE);
//__bis_SR_register(GIE);
}

void uart_char(char ch){


while(!(UCA1IFG & UCTXIFG));
UCA1TXBUF = ch;
}
void uart_string(const char *s){
while(*s != '\0'){
uart_char(*s);
s++;
}
}

Page 2
main * - Printed on 12/2/2024 03:51:43 PM
//UART 2
#include "io430f5529.h"

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff;
UCA0CTL1 =UCSWRST;
P4SEL |= BIT4 + BIT5;
UCA1CTL1 |= UCSSEL_2;
UCA1BR0 =104;
UCA1BR1 =0;
UCA1MCTL = UCBRS_1;
UCA1CTL1 &=~ UCSWRST;
UCA1IE |= UCRXIE;
__bis_SR_register(GIE);
while(1);

#pragma vector = USCI_A1_VECTOR


__interrupt void rx(void)
{
if (UCA1RXBUF =='0') //neu VDK nhan chu '0' thi tat het' den
{
P3OUT =0x00;
}
if (UCA1RXBUF =='1') //neu VDK nhan chu '1' thi sang' den
{
P3OUT =0x01;
}
if (UCA1RXBUF =='2') //neu VDK nhan chu '2' thi sang' den
{
P3OUT =0x02;
}
if (UCA1RXBUF =='3') //neu VDK nhan chu '3' thi sang' den
{
P3OUT =0x04;
}
if (UCA1RXBUF =='4') //neu VDK nhan chu '4' thi sang' den
{
P3OUT =0x08;
}
if (UCA1RXBUF =='5') //neu VDK nhan chu '5' thi sang' den
{
P3OUT =0x10;
}
if (UCA1RXBUF =='6') //neu VDK nhan chu '6' thi sang' den
{
P3OUT =0x20;
}
if (UCA1RXBUF =='7') //neu VDK nhan chu '7' thi sang' den
{
P3OUT =0x40;
}
if (UCA1RXBUF =='8') //neu VDK nhan chu '8' thi sang' den
{
P3OUT =0x80;
}
if (UCA1RXBUF =='9') //neu VDK nhan chu '9' thi sang' den
{
P3OUT =0xff;
}
}

Page 1

You might also like