The result means that Burnley are unbeaten in their last 15 matches in the division, with promotion to the Premier League increasingly probable.
Entertainment was at a premium for much of the opening 25 minutes as both sides struggled for fluency on a dry but uneven surface, before the game eventually sprung to life.
The home side were the first to threaten a goal as Burnley defender Michael Duff slipped, allowing Simon Church a run on goal. Jason Shackell, Duff's central defensive partner, put just enough pressure on the Wales international striker for Tom Heaton to be able to comfortably save.
The visitors then sprung up to the other end of the field where Barnes fed midfielder Scott Arfield who, after the ball had bobbled, shot tamely and straight at Ben Hamer.
Pressure suddenly began to mount on the Charlton defence and confusion at the heart of it allowed Vokes to fire a shot away which was deflected just wide.
Duff had found space from the resulting corner but could only head over from five yards.
In the 38th minute, Junior Stanislas crossed from the left and Ashley Barnes produced a fine header to net his first goal for the club since signing from Brighton during the transfer window.
With Danny Ings, who has 25 goals this season, sidelined by an ankle injury, it could prove significant if Barnes can aid Sam Vokes in providing the goals that fire Burnley back to the top tier of English football.
Indeed, three minutes later, Barnes could have scored for a second time when he made solid contact with his head from Chris Baird's cross, only to be thwarted by an astonishing point-blank save by Hamer.
Charlton defender Dorian Dervite produced a fine tackle to deny Vokes early in the second half.
But in the 55th minute it was Dervite's attempted tackle on the same player that handed Burnley a penalty.
Vokes sent Hamer the wrong way to bring his personal tally to 21 goals for the season.
The home side rallied and Astrit Ajdarevic, a half-time substitute, forced an excellent save from Heaton with a free-kick from 25 yards.
However, all of Charlton's pressure in the latter stages failed to amount to a genuine scoring opportunity and Burnley survived it with ease.
Michael Kightly, a Burnley substitute, then crossed from the left in stoppage time and with the aid of a deflection the ball found the net to complete the scoring.