User Tools

Site Tools


archive:nmk322

This is an old revision of the document!


NMK32203 - Microcontroller

Note20241017 This page is being updated - work in progress…

This course is Microcontroller, offered by the Faculty of Electronics Engineering & Technology.

Announcements

[20241017] Updating this for 202425s1 Academic Session.

Lecture Slides

Codes (discussed in class)

Introduction to using 'library' code. Single header include file(s) meant for single source compilation. These are meant to be compiled using Keil 8051 compiler.

Library: Serial (UART)

uart.h
#ifndef __MY1UART_H__
#define __MY1UART_H__
 
/* note: this is NOT compatible with keil's printf */
void uart_init(void) {
	SCON = 0x50;
	TMOD &= 0x0F;
	TMOD |= 0x20;
	TH1 = 253;
	TR1 = 1;
}
 
void uart_send(unsigned char sdat) {
	SBUF = sdat;
	while (TI==0);
	TI = 0;
}
 
unsigned char uart_read(void) {
	unsigned char rdat;
	while (RI==0);
	rdat = SBUF;
	RI = 0;
	return rdat;
}
 
void uart_puts(char* text) {
	while (*text) {
		uart_send(*text);
		text++;
	}
}
 
#endif /* __MY1UART_H__ */

Library: Text LCD

tlcd.h
#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

timer.h
#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__ */
archive/nmk322.1729141384.txt.gz · Last modified: by azman