====== NMK32203 - Microcontroller ======
//**Note20230217** This page is being updated - work in progress...//
This course is //Microcontroller//, offered by the Faculty of Electronics Engineering & Technology.
===== Announcements =====
[20230217] Welcome to the new NMK322 info page!
===== Lecture Slides =====
* Lecture Part 0 - Course Introduction
* Lecture Part 1 - {{:archive:nmk322:lecture2-intro2uc.pdf|Introduction to Microcontrollers}}
===== Codes (discussed in class) =====
//**Note**: I had to rename functions with the word p-r-i-n-t to 'puts'... somehow, UniMAP server does not like that word being sent to the server :-O //
//work in progress...//
==== Library: Serial (UART) ====
#ifndef __MY1UART_H__
#define __MY1UART_H__
void uart_init(void) {
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = 253;
TR1 = 1;
}
void uart_tx(unsigned char sdat) {
SBUF = sdat;
while (TI==0);
TI = 0;
}
unsigned char uart_rx(void) {
unsigned char rdat;
while (RI==0);
rdat = SBUF;
RI = 0;
return rdat;
}
void uart_puts(char* text) {
while (*text) {
uart_tx(*text);
text++;
}
}
#endif /* __MY1UART_H__ */
==== Library: Text LCD ====
#ifndef __MY1TLCD_H__
#define __MY1TLCD_H__
#define LCD_DATA P2
sbit LCD_RS = P0^7;
sbit LCD_RW = P0^6;
sbit LCD_EN = P0^5;
void tlcd_delay(unsigned char step) {
unsigned int loop;
do {
loop = 1000; while (--loop);
} while (--step);
}
void tlcd_write(unsigned char cdat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA = cdat;
LCD_EN = 1;
LCD_EN = 0;
tlcd_delay(1);
}
void tlcd_cmd(unsigned char ccmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA = ccmd;
LCD_EN = 1;
LCD_EN = 0;
tlcd_delay(2);
}
void tlcd_init(void) {
tlcd_cmd(0x38); /* 8 bit mode, 1/16 duty, 5x8 font */
tlcd_cmd(0x38);
tlcd_cmd(0x38);
tlcd_cmd(0x06); /* display off */
tlcd_cmd(0x0c); /* display on, blink cursor on */
tlcd_cmd(0x01); /* clear display */
}
void tlcd_puts(char* text) {
while (*text) {
tlcd_write(*text);
text++;
}
}
#endif /* __MY1TLCD_H__ */
==== Library: Timer ====
#ifndef __MY1TIMER_H__
#define __MY1TIMER_H__
// useful macro!
#define timer0_init() { TMOD &= 0xF0; TMOD |= 0x01; }
#define timer0_prep(hi,lo) { TH0 = hi; TL0 = lo; }
#define timer0_stop() { TR0 = 0; TF0 = 0; }
#define timer0_exec() { TR0 = 1; }
#define timer0_flag() { timer0_exec(); while (!TF0); }
#define timer0_wait(hi,lo) { timer0_prep(hi,lo); timer0_flag(); timer0_stop(); }
#define timer0_null() { TH0 = 0; TL0 = 0; }
#define timer0_read() ((unsigned int)TH0<<8)|TL0
void timer0_delayms(unsigned int step) {
do {
timer0_wait(0xfc,0x66); // 1 ms delay
} while (--step);
}
#endif /* __MY1TIMER_H__ */
===== Codes (for Lab Project) =====
You can get my personal 8051 code library from [[https://codeberg.org/azman/my1code51|here]] ([[https://codeberg.org/azman/my1code51/src/commit/8fcedf8442bd0f1c36202ba69f9a4ea8fb172b8b/LICENSE|LICENSE]]), which can be used for NMK322 lab project. **The codes provided in this repository is NOT ALLOWED to be used in any written (or lab) assessment**.