Gyenes Károly

Mikroszámítógépek a járműtechnikában


11. sz. melléklet

PWM jel generálása
 
// MCU kitt C8051F020 processzor
// CTC0 10 ms, On board LED1 blink 1 sec. PWM : P1.0
// Dr K. Gyenes 2013.10.16.
#include <compiler_defs.h>
#include <C8051F020_defs.h>
// SFR declarations
typedef unsigned char byte;
typedef unsigned int word;
#define SYSCLK (22118400L)
#define THREL 0xB8
// Reload value for timer_0 10 ms
#define TLREL 0x00
// 22118400/12 = 1843200/100 = 18432
// Function Prototypes
void init_Clock(void);
// System clock initialisation
void init_Port(void);
// Port and Crossbar initialization
void init_CTC0(void);
// CTC0 Timer 10 ms
void init_PCA0(void);
// PCA0 init for PWM
void delay(long t);
byte sec1 = 0;
byte cnt = 0;
byte nr, nr_old = 0;
// ---- main ----
void main (void)
{
init_Clock();
WDTCN = 0xDE;
// Switch off watchdog
WDTCN = 0xAD;
init_CTC0();
init_Port();
init_PCA0();
EA = 1;
SCON1 |= 0x02;
while (1)
// Endless working loop
{
nr = P4;
// Get SW5
if (nr^nr_old)
// SW4 changed
{
nr_old = nr;
PCA0CPH2 = nr;
// PWM control via P4 switch
}
}
// End of working loop
}
// ---- end of main ----
// IT routines
void CTC0_it(void) interrupt 1
// Occurs at every 10 ms
{
TH0 = THREL;
TL0 = TLREL;
cnt++;
if (cnt == 100)
// 1 sec
{
cnt = 0;
P5 ^= 0x10;
// Test blinking LED 1
sec1 = 0xFF;
}
}
// Initialization Subroutines
void init_Clock(void)
{
OSCXCN = 0x67;
// Ext. Osc. (christ. no divide by 2 stage)
delay(1000);
// wait
while ((OSCXCN & 0x80) != 0x80);
OSCICN |= 0x08;
// ON
}
void init_CTC0(void)
// CTC0 10 ms Time Base
{
TMOD = 0x11;
// CTC_0 : Timer mode 1; CTC1 : Timer mode 1
TH0 = THREL;
TL0 = TLREL;
ET0 = 1;
// Enable Timer_0 IT
TR0 = 1;
// Start Timer_0
}
void init_Port(void)
{
XBR0 = 0x05;
// Bit_2 : UART0EN (TX0 - P0.0, RX0 - P0.1)
// Bit_0 : SMBUS0 (SDA - P0.2, SCL P0.3 )
XBR0 |= 0x18;
// CEX0, CEX1, CEX2 enable
XBR2 = 0x44;
// Bit_2 : UART1EN (TX1 - P0.4, RX1 - P0.5)
// Bit_6 : Enable XBAR
P0MDOUT = 0x10;
// P0 output 0: open drain 1: Push-pull
P1MDOUT = 0xFF;
// P1 Push-pull
P2MDOUT = 0xFF;
// P2 Push-pull
P74OUT = 0x08;
// Output configuration for P4-7
P5 |= 0x0F;
P5 &= 0x0F;
// Ledek sötét
}
void init_PCA0(void)
// Configure PCA time base; overflow IT disabled
{
// PCA2 routed to P1.0
PCA0CN = 0x00;
// Stop counter; clear all flags
PCA0MD = 0x08;
// Use SYSCLK as time base (0x03 for SYSCLK/4)
CA0CPM2 = 0x42;
// Module 0 = 8-bit PWM mode
PCA0CPH2 = 0xFF;
// Configure initial PWM duty cycle = 0%
CR = 1;
// Start PCA counter
}
void delay(long t)
{
while(t--);
}
// ------------ E N D O F M O D U L E ------------
 

Mikroszámítógépek a járműtechnikában

Tartalomjegyzék


Kiadó: Akadémiai Kiadó

Online megjelenés éve: 2021

ISBN: 978 963 454 711 2

A kötet elsősorban a BME Közlekedésmérnöki Kar mesterszakos hallgatói számára készült az azonos nevű tárgy segédleteként, de hasznos lehet a logisztika, elektrotechnika és számítástechnika témái iránt érdeklődő hallgatók számára is. A szerző azoknak a mechatronika, elektronika és számítástechnika iránt elkötelezett hallgatóknak ajánlja, akik TDK-munkát készítenek, de hasznos lehet a diplomamunkát írók és az államvizsgára felkészülők számára is.

Hivatkozás: https://mersz.hu/gyenes-mechatronika-es-mikroszamitogepek//

BibTeXEndNoteMendeleyZotero

Kivonat
fullscreenclose
printsave